我的要求是在模糊短语搜索中生成匹配分数。例子
1) 输入数据 - 你好 Sam,你好吗?谢谢,史密斯。
- 索引文档 - Sam Smith(文档始终是个人/组织名称,输入数据将是自由文本数据)
在上述情况下,在我的输入数据中发现的 Sam 和 Smith 都是不同的人。如果我的输入数据是“Hello Sam Smith”,那么我应该得到更高分数的相关命中(我也期待“Hello Sam John Smith”等的好分数)。
我在这里使用 Lucene 进行初级过滤,稍后将使用输入数据对匹配的文档进行后处理并定义匹配分数(使用 levenshtein),它也应该适用于模糊。
准确的方法,
1) 将文档索引为 Tri-Grams
2) 使用 Tri-Gram 索引搜索输入的自由文本数据
3)收集所有匹配的文档(这将有很多嘈杂的数据)
4) 后处理每个匹配的文档并定义每个匹配的三元组标记在输入自由文本数据中的位置,并计算可能位置标记和整个文档之间的 levenshtein 分数。
例如 - 你好,山姆,你好吗?谢谢,史密斯。
在这里,我的文档匹配将是“Sam Smith”,我想查看每个三元索引及其在输入自由文本数据中的位置匹配,例如
1) 标记“sam”与输入数据中的第二个位置词“Sam”匹配
2) 标记“smi”与输入数据中的第 8 位单词“Smith”匹配
稍后我将编写逻辑来计算令牌 2、8 与实际匹配的文档的 levenshtein 分数(考虑到位置 2 和 8 之间的接近度,分数会非常低),但如果令牌的位置是 2,3(或 2,4)我会给很好的分数。
希望得到专家对此方法的反馈,或一些更好的建议,谢谢。