带评分的Lucene模糊短语搜索方法

带评分的Lucene模糊短语搜索方法,lucene,levenshtein-distance,fuzzy-search,Lucene,Levenshtein Distance,Fuzzy Search,我的要求是在模糊短语搜索中生成匹配分数。 范例 1) 输入数据-你好,山姆,你好吗?谢谢,史密斯 索引文档-Sam Smith(文档始终为个人/组织名称,输入数据为自由文本数据) 在上面的例子中,Sam和Smith都在我的输入数据中找到,但在上下文中他们都是不同的人。如果我的输入数据是“Hello Sam Smith”,那么我应该得到更高分数的相关命中率(同时我希望“Hello Sam John Smith”的分数为OK,以此类推) 我在这里使用Lucene进行初级过滤,稍后将使用输入数据对

我的要求是在模糊短语搜索中生成匹配分数。 范例

1) 输入数据-你好,山姆,你好吗?谢谢,史密斯

  • 索引文档-Sam Smith(文档始终为个人/组织名称,输入数据为自由文本数据)
在上面的例子中,Sam和Smith都在我的输入数据中找到,但在上下文中他们都是不同的人。如果我的输入数据是“Hello Sam Smith”,那么我应该得到更高分数的相关命中率(同时我希望“Hello Sam John Smith”的分数为OK,以此类推)

我在这里使用Lucene进行初级过滤,稍后将使用输入数据对匹配的文档进行后期处理,并定义匹配分数(使用levenshtein),它还应该适用于fuzzy

精确的方法

1) 将文档索引为Tri-gram

2) 使用Tri-Gram索引搜索输入的自由文本数据

3) 收集所有匹配的文档(这将有大量嘈杂的数据)

4) 对每个匹配的文档进行后期处理,定义每个匹配的tri-gram标记在输入自由文本数据中的位置,并计算可能的位置标记和整个文档之间的levenshtein分数

e、 你好,山姆,你好吗?谢谢,史密斯

在这里,我的文档匹配将是“Sam Smith”,我想查看每个三元索引及其在输入自由文本数据中的位置匹配,如

1) 标记“sam”与输入数据中的第二位置字“sam”匹配

2) 标记“smi”与输入数据中的第8位单词“Smith”匹配

稍后,我将编写逻辑,用实际匹配的文档计算标记2、8的levenshtein分数(考虑到位置2和8之间的接近性,分数会非常低),但如果标记的位置是2、3(或2、4),我会给出很好的分数


想从专家那里得到关于这种方法的反馈,或者一些更好的建议,谢谢。

我正在使用标记化序列在Lucene中进行类似的模糊短语匹配。使用Levenshtein或JaroWinkler计算标记距离,然后使用Smith Waterman找到最佳序列比对。如果我将这种方法应用到您的案例中,问题在于对齐得分无法(直接)支持代币交换(替换代币)。我能做的唯一一件事就是为源代码中出现的令牌插入的成本要比没有出现的令牌插入的成本低


所以我喜欢n-gram方法来获得对非局部重新排序不太敏感的评分。我建议查看BLEU、METORE和ROUGE,它们是句子相似性的标准n-gram度量,使用各种方法处理顺序敏感性。它们可以与您的建议中的字符级别n-gram一起使用,也可以与我正在做的标记级别n-gram一起使用。

关于bleu、meteor和rouge的好提示,我会检查并返回。