大文件的文本分析

时间:2009-07-12 21:02:14

标签: text-parsing lexical-analysis

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

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

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

我看到了之前的问题 Algorithms or libraries for textual analysis, specifically: dominant words, phrases across text, and collection of text

然而,它似乎与我试图做的有些不同。

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

5 个答案:

答案 0 :(得分:1)

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

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

例如,如果目的是检测抄袭,那么检测到两篇论文是相似的,因为他们谈论相同的科目并提出类似的参考文献不太可能有用 - 整个班级都会提交类似的论文!所以你可能正在寻找匹配完整的句子和短语。

如果您正在尝试为某些文档构建目录,那么您可能会搜索关键词。如果两个文件使用相同的单词词汇量或类似的专有名词,则两个文档是相似的。

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

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

提取器的工作是挖掘文档并生成文档本质的块(或列表,是否需要订购?):这些可能是单个单词或句子和短语。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分: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%相似。

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

答案 3 :(得分:0)

所有源控制系统使用的差异工具几乎就是这样做的。尝试其中之一来帮助您衡量差异的数量(以及它们的相似程度)。

答案 4 :(得分:0)

这取决于你想要达到的目标。如果目标是在一组文档中找到与给定文档类似的文档,您可以尝试这样的事情:

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