2017-06-01 79 views
0

我有一个数据帧DF这种结构:文件,术语矩阵与Quanteda

Rank Review 
5 good film 
8 very goood film 
.. 

然后我试图使用quanteda包来创建一个DocumentTermMatris:

temp.tf <- df$Review %>% tokens(ngrams = 1:1) %>% # generate tokens 
+ dfm %>% # generate dfm 
+ convert(to = "tm") 

我得到这个矩阵:

> inspect(temp.tf) 
<<DocumentTermMatrix (documents: 63023, terms: 23892)>> 
Non-/sparse entries: 520634/1505224882 
Sparsity   : 100% 
Maximal term length: 77 
Weighting   : term frequency (tf) 
Sample    : 

蒙山这种结构:

  Terms 
Docs  good very film my excellent heart David plus always so 
    text14670 1  0  0  0 1   0  0 0  2 0 
    text19951 3  0  0  0 0   0  0 1  1 1 
    text24305 7  0  2  1 0   0  0 2  0 0 
    text26985 6  0  0  0 0   0  0 4  0 1 
    text29518 4  0  1  0 1   0  0 3  0 1 
    text34547 5  2  0  0 0   0  2 3  1 3 
    text3781 3  0  1  4 0   0  0 3  0 0 
    text5272 4  0  0  4 0   5  0 3  1 2 
    text5367 3  0  1  3 0   0  1 4  0 1 
    text6001 3  0  9  1 0   6  0 1  0 1 

所以我认为这是好的,但我认为:text6001,text5367,text5272 ...引用文档的名称... 我的问题是这个矩阵中的行是有序的吗?或矩阵放在矩阵中?

谢谢

编辑:

我创建的文档词频:

mydfm <- dfm(df$Review, remove = stopwords("french"), stem = TRUE) 

然后,我创建了一个TF-IDF矩阵:

tfidf <- tfidf(mydfm)[, 5:10] 

然后我想将tfidf矩阵合并到Rank中列有这样的事情

  features 
Docs  good very film my excellent heart David plus always so Rank 
    text14670 1  0  0  0 1   0  0 0  2 0 3 
    text19951 3  0  0  0 0   0  0 1  1 1 2 
    text24305 7  0  2  1 0   0  0 2  0 0 4 
    text26985 6  0  0  0 0   0  0 4  0 1 5 

你能帮助使这个合并?

谢谢

回答

1

的行(文档)按字母顺序排列,这就是为什么text14670text19951之前。这是可能的转换已经重新排序的文件,但可以使用

sum(rownames(temp.tf) == sort(rownames(temp.tf)) 

如果不为0,那么他们不是按字母顺序排列测试此。

功能排序,至少在dfm中,来自它们在文本中的排列顺序。您可以使用dfm_sort()进行度假。

在你的代码中,tokens(ngrams = 1:1)是不必要的,因为dfm()这是否和ngrams = 1是默认的。

此外,您是否需要将其转换为tm对象?可能大部分你需要的东西都可以在quanteda完成。

+0

谢谢,最后一个问题..是否有可能用Quanteda创建tf-idf矩阵?当然最好 –

+1

。见'?tfidf'。或'?dfm_weight'。 –

+0

好,非常感谢 –