使用R-lsa包计算语义空间中文档之间的余弦相似性

时间:2013-03-05 16:52:44

标签: r cluster-analysis text-mining cosine lsa

我正在尝试使用R语言对类似文档进行聚类。 作为第一步,我为我的文档集计算术语 - 文档矩阵。 然后我为先前创建的术语 - 文档矩阵创建潜在的语义空间。我决定在我的实验中使用LSA,因为使用term-document矩阵进行聚类的结果非常糟糕。 是否可以使用创建的LSA空间构建相异矩阵(使用余弦度量)?我需要这样做,因为我使用的聚类算法需要一个相异矩阵作为输入。

这是我的代码:

require(cluster);
require (lsa);

myMatrix = textmatrix("/home/user/DocmentsDirectory");
myLSAspace = lsa(myMatrix, dims=dimcalc_share());

我需要从LSA空间构建一个相异矩阵(使用余弦测量),所以我可以按如下方式调用聚类算法:

clusters = pam(dissimilartiyMatrix,10,diss=TRUE);

有什么建议吗?

提前致谢!

2 个答案:

答案 0 :(得分:5)

要比较LSA空间中的两个文档,您可以获取$sk返回的$dklsa()矩阵的叉积来获取低维LSA中的所有文档-空间。这是我做的:

lsaSpace <- lsa(termDocMatrix)

# lsaMatrix now is a k x (num doc) matrix, in k-dimensional LSA space
lsaMatrix <- diag(lsaSpace$sk) %*% t(lsaSpace$dk)

# Use the `cosine` function in `lsa` package to get cosine similarities matrix
# (subtract from 1 to get dissimilarity matrix)
distMatrix <- 1 - cosine(lsaMatrix)

请参阅http://en.wikipedia.org/wiki/Latent_semantic_analysis,其中它表示您现在可以使用LSA结果“通过比较矢量sk * d_j和sk * d_q(通常通过余弦相似度)来查看相关文档j和q在低维空间中的情况)“。

答案 1 :(得分:2)

您可以使用包arules,例如:

 library(arules)
 dissimilarity(x=matrix(seq(1,10),ncol=2),method='cosine')
          1         2         3         4
2 -4.543479                              
3 -4.811989 -5.231234                    
4 -5.080052 -5.563952 -6.024433          
5 -5.343350 -5.885304 -6.395740 -6.877264