Ana*_*nan 0 string algorithm similarity
我想知道根据一组文档的相似性对句子进行排名的最佳方法.
比方说,
1.有5个文件.
每个文件都包含很多句子.
3.让我们将文档1作为主要文件,即输出将包含本文档中的句子.
4.输出应该是以这样的方式排列的句子列表:FIRST排名的句子是所有5个文档中最相似的句子,然后是第2个,然后是第3个......
提前致谢.
我将介绍文本文档匹配的基础知识......
大多数文档相似性度量基于单词而不是句子结构.第一步通常是阻止.单词被简化为它们的根形式,因此不同形式的相似单词,例如"游泳"和"游泳"匹配.
此外,您可能希望过滤匹配的单词以避免噪音.特别是,您可能希望忽略"the"和"a"的出现.事实上,你可能希望省略很多连词和代词,所以通常你会有很多这样的词 - 这叫做" 停止列表 ".
此外,您可能希望避免匹配的错误词语,例如咒骂词或种族诽谤词.所以你可能有另一个排除列表,里面有这样的单词,一个"坏名单".
所以现在你可以在文档中计算类似的单词.问题变成了如何衡量文档的总体相似度.您需要创建一个分数函数,将相似的单词作为输入,并给出"相似性"的值.如果在两个文档中多次出现相同的单词,这样的函数应该给出高值.另外,这样的匹配由总词频加权,以便当不常见的词匹配时,给予它们更多的统计权重.
Apache Lucene是一个用Java编写的开源搜索引擎,它提供了有关这些步骤的实用细节.例如,以下是有关如何加权查询相似性的信息:
http://lucene.apache.org/java/2_9_0/api/all/org/apache/lucene/search/Similarity.html
Lucene将信息检索的布尔模型(BM)与信息检索的向量空间模型(VSM)结合起来 - 由BM"批准"的文档由VSM评分.
所有这些只是在文档中匹配单词.你确实指定了匹配的句子.对于大多数人来说,匹配单词更有用,因为你可以拥有各种各样的句子结构,这些结构实际上意味着相同的东西.相似性最有用的信息就在单词中.我已经谈过文档匹配,但就你的目的而言,句子只是一个非常小的文档.
现在,顺便说一句,如果你不关心句子中的实际名词和动词而只关心语法构成,你需要一种不同的方法......
首先,您需要一个链接语法解析器来解释语言并构建表示句子的数据结构(通常是树).然后你必须执行不精确的图匹配.这是一个难题,但有多种算法可以在多项式时间内对树进行此操作.