1

我正在使用 LSA(使用 R)进行文档相似性分析。这是我的步骤

  1. 导入文本数据并创建语料库。是否进行了基础语料库操作,例如词干提取、空白删除等

  2. 创建 LSA 空间如下

    tdm <- TermDocumentMatrix(chat_corpus) tdm_matrix <- as.matrix(tdm) tdm.lsa <- lw_bintf(tdm_matrix)*gw_idf(tdm_matrix) lsaSpace <- lsa(tdm.lsa)

  3. LSA 上的多维建模 (MDS)

'

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)

预期结果

4

1 回答 1

0

为了做到这一点,您首先需要从您创建的 lsa 空间中获取S_k和矩阵,并乘以的转置 以获得by矩阵,其中是维数, 是文档数。这段代码如下:D_kS_kD_kknkn

lsaMatrix <- diag(myLSAspace$sk) %*% t(myLSAspace$dk)

然后就像将结果矩阵通过包中的cosine函数一样简单lsa

simMatrix <- cosine(lsaMatrix)

这将产生一个n^2大小相似矩阵,然后可以用于聚类等。

您可以在包文档中阅读有关S_kD_k矩阵的更多信息lsa,它们是应用的 SVD 的输出。

https://cran.r-project.org/web/packages/lsa/lsa.pdf

于 2018-07-26T10:48:37.203 回答