NLP 如何获得 2 个文档之间的差异

Posted

技术标签:

【中文标题】NLP 如何获得 2 个文档之间的差异【英文标题】:NLP How to get the difference between 2 documents 【发布时间】:2016-10-08 08:45:49 【问题描述】:

我有 2 个文档 A-B(或 2 个系列文档),并希望获得 显示两个文档之间差异的新文档:A-B

按区别,有几种定义,一种是: 单词列表/“概念”包含在 A 中但不包含在 B 中。

我正在考虑对 A 和 B 的每个句子使用 TF IDF, 如:

from sklearn.feature_extraction.text import TfidfVectorizer
d1 = [open(f1) for f1 in text_files]
tfidf = TfidfVectorizer().fit_transform(d1)
pairwise_similarity = tfidf * tfidf.T

我不确定这是否与生成新文档有关 C= "A-B", 特别对文档C中的“语义差异”感兴趣

【问题讨论】:

我不认为这是一个可以在 SO 帖子中快速回答的微不足道的问题。我会在 Reddit/machinelearning 中提问。 好的,当然。也许,一些参考资料对开始调查很有用。 【参考方案1】:

gensim 使用Cosine similarity 计算文档之间的相似度(详情here):

index = similarities.MatrixSimilarity(lsi[corpus]) # transform corpus to LSI space and index it
sims = index[vec_lsi] # perform a similarity query against the corpus

在上面的代码中,vec_lsi 是 LSI 空间中的文档 A,sims 是 A 与 corpus 中的文档之间的相似性数组。

根据wikipedia,您可以翻转余弦相似度并计算角距离,这是一个距离度量:

distance = np.arccos(sims)/np.pi

请注意,这些余弦相似度和角距离是基于向量的,它们的解释将取决于您的向量所包含的内容。在我的示例中,向量是潜在语义索引 (LSI) 分数,因此角距离与语义空间中的距离有关。

【讨论】:

但是,它没有提供任何东西来生成文档 C= A-B

以上是关于NLP 如何获得 2 个文档之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何获得 2 个 cv::Mat 对象之间的绝对差异

如何获得两个DataFrame之间的差异[重复]

Impala 获得 2 个日期之间的差异,不包括周末

如何获得两个查询结果集之间的差异

如何获得两个日期之间的差异(informix)?

如何获得两个数据表之间的差异