R:使用tm和proxy计算距术语文档矩阵的余弦距离

CptNemo

我想计算一个语料库作者之间的余弦距离。让我们看一看20个文档的语料库。

require(tm)
data("crude")
length(crude)
# [1] 20

我想找出这20个文档之间的余弦距离(相似度)。我用创建一个术语文档矩阵

tdm <- TermDocumentMatrix(crude,
                          control = list(removePunctuation = TRUE,
                                         stopwords = TRUE))

那么我将它转化成一个矩阵,它传递给dist()了的代理

tdm <- as.matrix(tdm)
require(proxy)
cosine_dist_mat <- as.matrix(dist(t(tdm), method = "cosine"))

最后,我删除余弦距离矩阵的对角线(因为我对文档与其自身之间的距离不感兴趣),并计算出每个文档与语料库的其他19个文档之间的平均距离

diag(cosine_dist_mat) <- NA
cosine_dist <- apply(cosine_dist_mat, 2, mean, na.rm=TRUE)

cosine_dist
# 127       144       191       194 
# 0.6728505 0.6788326 0.7808791 0.8003223 
# 211       236       237       242 
# 0.8218699 0.6702084 0.8752164 0.7553570 
# 246       248       273       349 
# 0.8205872 0.6495110 0.7064158 0.7494145 
# 352       353       368       489 
# 0.6972964 0.7134836 0.8352642 0.7214411 
# 502       543       704       708 
# 0.7294907 0.7170188 0.8522494 0.8726240

到目前为止一切都很好(使用小型语料库)。问题在于,这种方法不能很好地用于较大的文档集。一次,由于两次调用as.matrix(),将tmtdmtm传递proxy并最终计算平均值,似乎效率低下

是否有可能构想出更智能的方法来获得相同的结果?

众多帽子

由于tm的术语文档矩阵只是slam软件包中的稀疏“简单三元组矩阵” ,因此您可以使用那里的函数直接根据余弦相似度的定义来计算距离:

library(slam)
cosine_dist_mat <- 1 - crossprod_simple_triplet_matrix(tdm)/(sqrt(col_sums(tdm^2) %*% t(col_sums(tdm^2))))

这利用了稀疏矩阵乘法。在我手中,一个tdm在220个文档中具有2963个术语,稀疏度为97%,仅用了几秒钟。

我没有对此进行分析,因此我不知道它的速度是否比快proxy::dist()

注:这工作,你应该不是强迫的TDM到常规基质,即不做tdm <- as.matrix(tdm)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将术语文档矩阵转换为tm库支持的术语文档矩阵

来自分类Dev

R中字母的术语文档矩阵

来自分类Dev

整洁的文本:从以下术语文档矩阵计算 Zipf 定律

来自分类Dev

R 将数据框转换为术语文档矩阵

来自分类Dev

Python:从列表创建术语文档矩阵

来自分类Dev

将大文档术语文档矩阵转换为矩阵

来自分类Dev

将包含行名,列名和频率的pandas df转换为术语文档矩阵

来自分类Dev

将术语文档矩阵转换为R中的节点/边列表

来自分类Dev

计算矩阵行之间的余弦距离

来自分类Dev

如何在Python中的术语文档矩阵中使用PCA?

来自分类Dev

使用特定标记(以及所有其他标记)构建术语文档矩阵

来自分类Dev

如何从一组文本和一组特定的术语(标签)构建术语文档矩阵?

来自分类Dev

使用tm检查文档术语矩阵的相应术语(英语中的vocab?)

来自分类Dev

从ElasticSearch索引在Python中创建术语文档矩阵

来自分类Dev

将术语文档矩阵传递给Gensim LDA模型

来自分类Dev

文本分析:术语文档矩阵之后是什么?

来自分类Dev

使用R中的矩阵乘法计算逐行余弦相似度

来自分类Dev

R中的文档术语矩阵

来自分类Dev

如何使用本机R创建文档术语矩阵

来自分类Dev

如何使用本机R创建文档术语矩阵

来自分类Dev

向量到矩阵的余弦距离

来自分类Dev

大文档术语矩阵-计算文档的字符数时出错

来自分类Dev

大文档术语矩阵-计算文档的字符数时出错

来自分类Dev

使用Numpy和Cython加速距离矩阵计算

来自分类Dev

在R中创建文档术语矩阵

来自分类Dev

在R中读取DataFrame中的数组并计算余弦距离

来自分类Dev

R tm / qdap-根据术语获取文档

来自分类Dev

tf-idf 文档术语矩阵和 LDA:R 中的错误消息

来自分类Dev

如何在scikit-learn中查看tfidf之后的术语文档矩阵的前n个条目

Related 相关文章

  1. 1

    将术语文档矩阵转换为tm库支持的术语文档矩阵

  2. 2

    R中字母的术语文档矩阵

  3. 3

    整洁的文本:从以下术语文档矩阵计算 Zipf 定律

  4. 4

    R 将数据框转换为术语文档矩阵

  5. 5

    Python:从列表创建术语文档矩阵

  6. 6

    将大文档术语文档矩阵转换为矩阵

  7. 7

    将包含行名,列名和频率的pandas df转换为术语文档矩阵

  8. 8

    将术语文档矩阵转换为R中的节点/边列表

  9. 9

    计算矩阵行之间的余弦距离

  10. 10

    如何在Python中的术语文档矩阵中使用PCA?

  11. 11

    使用特定标记(以及所有其他标记)构建术语文档矩阵

  12. 12

    如何从一组文本和一组特定的术语(标签)构建术语文档矩阵?

  13. 13

    使用tm检查文档术语矩阵的相应术语(英语中的vocab?)

  14. 14

    从ElasticSearch索引在Python中创建术语文档矩阵

  15. 15

    将术语文档矩阵传递给Gensim LDA模型

  16. 16

    文本分析:术语文档矩阵之后是什么?

  17. 17

    使用R中的矩阵乘法计算逐行余弦相似度

  18. 18

    R中的文档术语矩阵

  19. 19

    如何使用本机R创建文档术语矩阵

  20. 20

    如何使用本机R创建文档术语矩阵

  21. 21

    向量到矩阵的余弦距离

  22. 22

    大文档术语矩阵-计算文档的字符数时出错

  23. 23

    大文档术语矩阵-计算文档的字符数时出错

  24. 24

    使用Numpy和Cython加速距离矩阵计算

  25. 25

    在R中创建文档术语矩阵

  26. 26

    在R中读取DataFrame中的数组并计算余弦距离

  27. 27

    R tm / qdap-根据术语获取文档

  28. 28

    tf-idf 文档术语矩阵和 LDA:R 中的错误消息

  29. 29

    如何在scikit-learn中查看tfidf之后的术语文档矩阵的前n个条目

热门标签

归档