【问题标题】:Document-Term Matrix with Quanteda使用 Quanteda 的文档术语矩阵
【发布时间】:2017-06-01 09:33:49
【问题描述】:

我有一个具有这种结构的数据框 df:

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

你能帮忙完成这个合并吗?

谢谢

【问题讨论】:

    标签: r matrix dataframe quanteda


    【解决方案1】:

    行(文档)按字母顺序排列,这就是text14670 位于text19951 之前的原因。转换可能对文档进行了重新排序,但您可以使用

    进行测试
    sum(rownames(temp.tf) == sort(rownames(temp.tf))
    

    如果不是 0,那么它们不是按字母顺序排列的。

    特征排序,至少在 quanteda dfm 中,来自它们在文本中出现的顺序。您可以同时使用dfm_sort()

    在您的代码中,tokens(ngrams = 1:1) 是不必要的,因为 dfm() 会这样做,而 ngrams = 1 是默认值。

    另外,您需要将其转换为 tm 对象吗?可能您需要的大部分内容都可以在 quanteda 中完成。

    【讨论】:

    • 谢谢,最后一个问题.. Quanteda 是否可以创建 tf-idf 矩阵?最佳
    • 我只是编辑我的帖子,你能帮我解决我的问题吗?谢谢
    • 不清楚您在问什么 - Rank 是什么? tf-idf 是特定于单元格的,因此您不能将其转换为文档级功能(每个文档一个值)。我建议开始一个新的 SO 问题,并通过可重现的示例更清楚地说明您期望的输出。
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2015-05-19
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2017-09-12
    相关资源
    最近更新 更多