【问题标题】:using findAssocs in R to find frequently occurred words with central term使用 R 中的 findAssocs 查找具有中心词的频繁出现的单词
【发布时间】:2016-07-20 03:41:23
【问题描述】:

当我在 R 中使用 findAssocs 时,我意识到该函数实际上并没有拾取与搜索词文档一起出现的词,而是在搜索时出现的词词经常出现。

我尝试过使用下面的简单测试脚本:

test <- list("housekeeping bath towel housekeeping room","housekeeping dirty","housekeeping very dirty","housekeeping super dirty")
test <-Corpus(VectorSource(test))
test_dtm<-DocumentTermMatrix(test)
test_dtms<-removeSparseTerms(test_dtm,0.99)

findAssocs(test_dtms,"housekeeping",corlimit = 0.1)

R 的返回结果是:

$housekeeping
 bath  room towel 
    1     1     1 

注意到“dirty”一词出现在 4 个文档中的 3 个中,而返回的关键字在所有文档中只出现一次。

有人知道我的脚本出了什么问题,或者是否有更好的方法来做到这一点?

我想要实现的结果是模型应该在所有文档中而不是在特定文档中反映与搜索词一起频繁出现的词。我尝试将 4 个文档合并为 1 个,但它不起作用,因为 findAssocs 不适用于单个文档。

有什么建议吗?

【问题讨论】:

  • 查看cor(c(2,1,1,1), c(0,1,1,1))的结果。这是您对“家务”与“脏”的相关性计算。它是 -1,findAssocs 要求相关性介于 0 和 1 之间。
  • @Jota 感谢您强调了这一点,如果我想在这里强调的词是“脏”,您能否建议是否有其他选择?
  • 是的,您可以深入研究findAssocs 的代码并根据您的需要进行修改。例如,这是我从代码中挖出来的,根本没有测试:j &lt;- match("housekeeping", Terms(test_dtms), nomatch = 0L); slam::crossapply_simple_triplet_matrix(test_dtms[, j], test_dtms[, -j], cor) 或者你可以看看其他包。 quanteda 有一个 similiarity 功能,您可以查看。它支持您可以查看的大量相似性和距离度量。
  • @Jota 感谢您推荐 quanteda 软件包!它似乎在包中有一个非常全面的文本挖掘解决方案。我发现这篇文章对我的问题很有帮助:stackoverflow.com/questions/21357656/…。我尝试使用作者的余弦相似度方法并取得了预期的结果。 :)

标签: r correlation tm


【解决方案1】:

使用 quanteda 包的替代方案怎么样?它对返回的相关性没有任何神秘限制,并且有许多其他选项(请参阅?similarity)。

require(quanteda)

testDfm <- dfm(unlist(test), verbose = FALSE)
## Document-feature matrix of: 4 documents, 7 features.
## 4 x 7 sparse Matrix of class "dfmSparse"
##        features
## docs    housekeeping bath towel room dirty very super
##   text1            2    1     1    1     0    0     0
##   text2            1    0     0    0     1    0     0
##   text3            1    0     0    0     1    1     0
##   text4            1    0     0    0     1    0     1

similarity(testDfm, "housekeeping", margin = "features")
## similarity Matrix:
## $housekeeping
##   bath   towel    room    very   super   dirty 
## 1.0000  1.0000  1.0000 -0.3333 -0.3333 -1.0000 

【讨论】:

  • 谢谢。 Jota 提到的 -1 的相关性似乎更加清晰。尽管如此,显示 -1 的相关性对业务用户来说不是一个不好的证据吗?我尝试过使用余弦方法,它似乎确实解决了测试示例中的问题。但是当我在更大的数据集上尝试它时,由于搜索词在特定文档中出现的次数更多,应该显示的单词再次变得不那么重要了。
  • 我想知道,是否可以将每个文档的搜索词减少为 1,以便所有文档只有 1 个搜索词被标记,并且都有平等的机会被发现?但这是否被视为“操纵数据”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2010-09-16
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多