2012-01-03 63 views
0

我想知道基于来自一组文档的相似性对句子进行排名的最佳方法。
例如可以说,
1.有5个文件。
2.每个文件包含很多句子。
3.让我们将文档1作为主要文档,即输出将包含此文档中的句子。
4.输出应该是排在以这样的方式与第一排,这句话是在所有5个文件最相似的句子,然后接着第二第三句列表...提前
根据一组文档中的相似性排列句子的最佳方法

感谢。

回答

5

我将文本文档匹配的基础知识...

大多数文档相似性措施,一个字的基础上工作,而不是句子结构。第一步通常是stemming。单词被简化为它们的根形式,以便不同形式的相似单词,例如“游泳”和“游泳”相匹配。

此外,你可能希望过滤你匹配的单词以避免噪音。特别是,你可能希望忽略“the”和“a”的发生。事实上,有很多连词和代词可能希望省略,所以通常会有一长串这样的词语 - 这就是所谓的“stop list”。

此外,你可能会有一些不希望避免匹配的错误词语,例如骂人的话或种族诽谤话。所以你可能会有另一个排除列表,里面有这样的单词,是一个“坏名单”。

因此,现在您可以计算文档中的类似词汇。问题变成了如何衡量文档总体相似度。您需要创建一个分数函数,将相似的单词作为输入并给出“相似性”的值。如果同一个单词在两个文档中出现多次,则此功能应该具有较高的价值。此外,这些匹配由总词频加权,以便当不常用的单词匹配时,它们被赋予更多的统计权重。

Apache Lucene是一个用Java编写的开源搜索引擎,提供了有关这些步骤的实用细节。举例来说,这里是他们如何重查询类似的信息:

http://lucene.apache.org/java/2_9_0/api/all/org/apache/lucene/search/Similarity.html

Lucene的结合布尔模型(BM)信息检索与信息检索的 向量空间模型(VSM) - 文件 “由BM批准“由VSM评分。

所有这些都只是关于文档中的单词匹配。你确实指定了匹配的句子。对于大多数人的目的来说,匹配词更有用,因为您可以拥有各种各样的句子结构,这些语句结构真的意味着同一件事。相似度最有用的信息就在文字中。我谈过文件匹配,但为了你的目的,一个句子只是一个非常小的文件。现在,顺便说一句,如果你不关心句子中的实际名词和动词,只关心语法组成,你需要一种不同的方法......

首先,您需要一个link grammar parser来解释语言并构建一个表示该句子的数据结构(通常是一棵树)。然后你必须执行不精确的图形匹配。这是一个棘手的问题,但有多种算法可以在多项式时间内在树上执行此操作。

+0

非常感谢您的回答。现在我明白了如何继续。 – 2012-01-04 14:01:21

+0

很有意思的帖子 – Alex 2012-01-04 15:57:31

+0

很好的回答蒂姆。当然+1。 – 2012-01-07 01:47:28

0

作为一个起点,您可以计算每个单词的soundex,然后根据soundexes频率比较文档。

+0

感谢您的回答。 – 2012-01-06 11:33:19

0

Tim的概述非常好。我只想补充一点,就您的特定用例而言,您可能希望将文档1中的句子当作文档处理,并将它们的相似性与其余四个文档中的每一个进行比较。这可能会给你一个快速的聚合相似度措施,而不会强迫你沿着语法分析的路线等。

相关问题