我正在使用LSA (使用R)进行文档相似性分析。这是我的脚步声
tdm <- TermDocumentMatrix(chat_corpus) tdm_matrix <- as.matrix(tdm) tdm.lsa <- lw_bintf(tdm_matrix)*gw_idf(tdm_matrix) lsaSpace <- lsa(tdm.lsa)‘
dist.mat.lsa <- dist(t(as.textmatrix(lsaSpace)))
fit <- cmdscale(dist.mat.lsa,eig = T)
points <- data.frame(fit1$points,row.names=chat$text)我想要创建一个矩阵/数据框架,显示文本是多么相似(如附件结果所示)。行和列将是要匹配的文本,而单元格值将是它们的相似值。理想情况下,对角线值将为1 (完美匹配),而其余单元格值将小于1。
请对如何做这件事提出一些见解。提前感谢
注意:我获得了用于此的python代码,但在R中需要相同的代码。
similarity = np.asarray(numpy.asmatrix(dtm_lsa) * numpy.asmatrix(dtm_lsa).T)
pd.DataFrame(similarity,index=example, columns=example).head(10)发布于 2018-07-26 10:48:37
为了做到这一点,您首先需要从您创建的lsa空间中提取S_k和D_k矩阵,并通过D_k的转置将S_k乘以,得到k由n矩阵得到,其中k是维数,n是文档数。这一守则如下:
lsaMatrix <- diag(myLSAspace$sk) %*% t(myLSAspace$dk)
然后,只需将生成的矩阵通过来自cosine包的lsa函数即可:
simMatrix <- cosine(lsaMatrix)
这将产生一个n^2大小相似度矩阵,然后可以用于聚类等。
您可以在S_k包文档中更多地了解lsa和D_k矩阵,它们是应用的SVD的输出。
https://stackoverflow.com/questions/40040492
复制相似问题