我想知道根据一组文件的相似性对句子进行排名的最佳方法
例如,让我们说,
1.共有5份文件
每个文件都包含很多句子
3.将文件1作为主要文件,即输出将包含本文件中的句子
4.输出应该是以这样的方式排列的句子列表:FIRST排名的句子是所有5个文件中最相似的句子,然后是第2和第3 ......
提前致谢。
答案 0 :(得分: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来解释语言并构建表示句子的数据结构(通常是树)。然后你必须执行不精确的图匹配。这是一个难题,但有多种算法可以在多项式时间内对树进行此操作。
答案 1 :(得分:0)
作为起点,您可以为每个单词计算soundex,然后根据索引频率比较文档。
答案 2 :(得分:0)