1

我有一个项目,我需要将多章文档与第二个文档进行比较以确定它们的相似性。问题是我不知道如何去做,存在哪些方法,或者它们是否有任何可用的库。

我的第一个问题是......什么是相似的?匹配的单词数,匹配的连续单词数?

我可以看到编写一个解析器,将每个文档放入包含单词和位置的数组中,然后比较它们。

我在 Algorithms or libraries for text analysis 看到了较早的问题 ,具体来说:主要词、跨文本的短语和文本集合

但是,这似乎与我尝试做的有些不同。

人们可能拥有的任何选项或指示都会很棒!

4

5 回答 5

1

您可以使用的一种方法称为 Shingling。该过程涉及标记两个文档中的所有单词,例如。

D1 = {"An", "Example", "Document", "To", "Show", "Shingling"}
D2 = {"Another", "Example", "Document", "To", "Show", "Shingling", "but", "longer"}

然后取一组窗口长度为 n 的连续子序列(记住在一组中没有重复)。

S(D1, 3) = {{"An", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}}

S(D2, 3) = {{"Another", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}, {"Show", "Shingling", "but"}, {"Shingling", "but", "longer"}}

然后相似度是交集的基数除以并集的基数。因此,对于我们的示例,3/7 = 43% 相似。

可以通过使用随机选择的草图(一组带状疱疹的子集)来进行有效的近似。

于 2009-07-24T21:20:02.850 回答
1

一种简单的方法是将文档文本连接在一起,然后压缩它们。压缩比可以告诉你有多少相似度。

于 2009-07-12T22:14:25.010 回答
1

“什么是相似的”我们不能告诉你,这是对你项目的基本要求的陈述。如果您不知道这一点,那么很快就会考虑如何去做。

问“为什么”这个问题可能会有所帮助。相似性度量将用于什么?

例如,如果目的是检测剽窃,那么检测两篇论文是相似的,因为它们谈论相同的主题并提供相似的参考文献可能没有帮助 - 整个班级都会提交相似的论文!因此,您可能正在寻找匹配的精确句子和短语。

相反,如果您尝试为某些文档构建目录,那么您可能会搜索关键词。如果两个文档在一定长度上使用相同的词汇表或相似的专有名词,则它们是相似的。

这两个例子旨在证明,在我们理解相似的含义之前,很难给出太多建议。

但是,这是一种可能的方法。你可以写两个主要的东西:一个提取器和一个比较器。

提取器的工作是遍历文档并生成作为文档本质的块的集合(或列表,是否需要排序?):这些可能是单个单词或句子和短语。

比较器的工作是评估两个文档“本质”的相似性。

简单示例:从文档中提取 8 个或更多字母的唯一单词列表。如果一个集合包含超过 75% 的其他文档,则比较可能是两个文档相似。

于 2009-07-12T21:20:49.393 回答
0

这取决于您想要达到的目标。如果目标是在一组文档中找到与给定文档相似的文档,您可以尝试以下操作:

根据文档的不同,你可以先从长文档中提取出最有意义的关键词或关键句,从而提取出文本的本质(谷歌“关键词提取”)。然后,您可以使用文本相似性算法(如 k-最近邻算法)来找出相似的文档。关键是提取文本的关键部分。

于 2009-07-12T21:33:47.400 回答
0

所有源代码控制系统使用的差异工具几乎都可以做到这一点。尝试其中一种方法来帮助您衡量差异的数量(以及它们的相似程度)。

于 2009-07-12T21:20:06.633 回答