1

一段时间以来,我一直在使用该textmatrix()功能来创建可以进一步用于 LSI 的 DTM。

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

Textmatrix() 是一个函数,它接受一个目录(文件夹路径)并返回一个文档方面的词频。这用于进一步分析,如潜在语义索引/分配(LSI/LSA)

但是,我遇到的一个新问题是,如果我在批处理文件中有推文数据(~500000 条推文/批处理)并且我想对这些数据执行类似的操作。

我有代码模块来清理我的数据,我想将清理后的推文直接传递给 LSI 函数。我面临的问题是textmatrix()不支持它。

我尝试查看其他包和代码片段,但这并没有让我更进一步。有什么方法可以创建各种行项矩阵?

我尝试发送table(tokenize(cleanline[i]))到一个循环,但它不会为矩阵中不存在的单词添加新列。任何解决方法?

更新:我刚试过这个:

a<-table(tokenize(cleanline[10]))
b<-table(tokenize(cleanline[12]))

df1<-data.frame(a)
df1
df2<-data.frame(b)
df2

merge(df1,df2, all=TRUE)

我懂了:

> 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

我想我很接近了。

4

2 回答 2

0

尝试这样的事情

  ll <- list(df1,df2)
  dtm <- xtabs(Freq ~ ., data = do.call("rbind", ll))
于 2013-01-03T09:57:01.677 回答
0

对我有用的东西:

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))
}

你觉得这段代码怎么样?

于 2013-01-03T10:30:49.587 回答