R 如何从文本块列表创建类似DTM的文本矩阵?
我使用R 如何从文本块列表创建类似DTM的文本矩阵?,r,text-mining,corpus,R,Text Mining,Corpus,我使用textmatrix()函数创建DTM已有一段时间了,可以进一步用于LSI dirLSA<-function(dir){ dtm<-textmatrix(dir) return(lsa(dtm)) } textdir<-"C:/RProjects/docs" dirLSA(textdir) > tm $matrix D1 D2 D3 D4 D5 D6 D7 D8 D9 1. 000 2 0
textmatrix()
函数创建DTM已有一段时间了,可以进一步用于LSI
dirLSA<-function(dir){
dtm<-textmatrix(dir)
return(lsa(dtm))
}
textdir<-"C:/RProjects/docs"
dirLSA(textdir)
> tm
$matrix
D1 D2 D3 D4 D5 D6 D7 D8 D9
1. 000 2 0 0 0 0 0 0 0 0
2. 20 1 0 0 1 0 0 1 0 0
3. 200 1 0 0 0 0 0 0 0 0
4. 2014 1 0 0 0 0 0 0 0 0
5. 2015 1 0 0 0 0 0 0 0 0
6. 27 1 0 0 0 0 0 0 1 0
7. 30 1 0 0 0 1 0 1 0 0
8. 31 1 0 2 0 0 0 0 0 0
9. 40 1 0 0 0 0 0 0 0 0
10. 45 1 0 0 0 0 0 0 0 0
11. 500 1 0 0 0 0 0 1 0 0
12. 600 1 0 0 0 0 0 0 0 0
728. bias 0 0 0 2 0 0 0 0 0
729. biased 0 0 0 1 0 0 0 0 0
730. called 0 0 0 1 0 0 0 0 0
731. calm 0 0 0 1 0 0 0 0 0
732. cause 0 0 0 1 0 0 0 0 0
733. chauhan 0 0 0 2 0 0 0 0 0
734. chief 0 0 0 8 0 0 1 0 0
我明白了:
> df1
Var1 Freq
1 6
2 " 2
3 and 1
4 home 1
5 mabe 1
6 School 1
7 then 1
8 xbox 1
> b<-table(tokenize(cleanline[12]))
> df2<-data.frame(b)
> df2
Var1 Freq
1 13
2 " 2
3 BillGates 1
4 Come 1
5 help 1
6 Mac 1
7 make 1
8 Microsoft 1
9 please 1
10 Project 1
11 really 1
12 version 1
13 wish 1
14 would 1
> merge(df1,df2)
Var1 Freq
1 " 2
> merge(df1,df2, all=TRUE)
Var1 Freq
1 6
2 13
3 " 2
4 and 1
5 home 1
6 mabe 1
7 School 1
8 then 1
9 xbox 1
10 BillGates 1
11 Come 1
12 help 1
13 Mac 1
14 make 1
15 Microsoft 1
16 please 1
17 Project 1
18 really 1
19 version 1
20 wish 1
21 would 1
>df1
Var1频率
1 6
2 " 2
3和1
4家1
5 mabe 1
6学校1
7那么1
8 xbox 1
>b df2 df2
Var1频率
1 13
2 " 2
3个广告牌1
4来1
5帮助1
6 Mac 1
7等于1
8微软1
9.请
10项目1
11真的吗
12第1版
13愿望1
14会是1吗
>合并(df1,df2)
Var1频率
1 " 2
>合并(df1、df2、all=TRUE)
Var1频率
1 6
2 13
3 " 2
4和1
5家1
6 mabe 1
7学校1
8那么1
9 xbox 1
10个广告牌1
11来1
12帮助1
13 Mac 1
14等于1
15微软1
16、请
17项目1
18真的吗
19第1版
20愿望1
21会是1吗
我想我很接近了。试试这样的东西
ll <- list(df1,df2)
dtm <- xtabs(Freq ~ ., data = do.call("rbind", ll))
ll适合我的东西:
textLSA<-function(text){
a<-data.frame(table(tokenize(text[1])))
colnames(a)[2]<-paste(c("Line",1),collapse=' ')
df<-a
for(i in 1:length(text)){
a<-data.frame(table(tokenize(text[i])))
colnames(a)[2]<-paste(c("Line",i),collapse=' ')
df<-merge(df,a, all=TRUE)
}
df[is.na(df)]<-0
dtm<-as.matrix(df[,-1])
rownames(dtm)<-df$Var1
return(lsa(dtm))
}
text如果在df1和df2中有一些空格,它们是转义还是什么?df1 e.gyep的第一行和第二行。所以,如果一个单词不在第二行,它将显示为NA。是的。它将DFs汇总到一个累积列表中,而不是根据需要汇总到表中。我想问题在于各个数据帧中的列名称是相同的,这导致它们汇总到相同的列中。我的解决方案面临相同的问题,这就是为什么我必须更改列名称。
textLSA<-function(text){
a<-data.frame(table(tokenize(text[1])))
colnames(a)[2]<-paste(c("Line",1),collapse=' ')
df<-a
for(i in 1:length(text)){
a<-data.frame(table(tokenize(text[i])))
colnames(a)[2]<-paste(c("Line",i),collapse=' ')
df<-merge(df,a, all=TRUE)
}
df[is.na(df)]<-0
dtm<-as.matrix(df[,-1])
rownames(dtm)<-df$Var1
return(lsa(dtm))
}