【发布时间】: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 <- 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