前缀相似性搜索

3

我正在寻找一种模糊搜索的方式,其中文本数据库和查询可能具有拼写变体。特别是,文本数据库是从网络收集的材料,不太可能从全文引擎的准备阶段(单词词干)中受益。 我可以想象使用pg_trgm作为起点,然后通过Levenshtein验证命中。然而,人们倾向于进行前缀查询,例如,在音乐领域,我希望“beetho交响乐”是一个合理的搜索词。因此,如果有人键入“betho交响乐”,是否有合理的方法(使用postgresql和TCL或Perl脚本),以发现“betho”部分应与“beetho”进行比较(返回编辑距离为1)。

2个回答

1
我最终得到的是常用算法的简单修改:通常情况下,我只会从矩阵或向量对中选择最后一个值。参考http://en.wikipedia.org/wiki/Levenshtein_distance中的“迭代”算法,我将要探测的字符串作为第一个参数,查询字符串作为第二个参数。现在,当算法完成时,结果列中的最小值给出正确的结果。
样本结果: 查询“fantas”,数据库中的单词“fantasy”、“fantastic” => 0 查询“fantas”,数据库中的单词“fan” => 3
编辑距离的输入是从基于三字母组相似性的“最多单词”列表中选择的单词。

0
你可以修改编辑距离算法,给字符串的后半部分赋予更低的权重。
例如:Match(i,j) = 1/max(i,j)^2 而不是 Match(i,j)=1 对于每个 i 和 j。(i 和 j 是您正在比较的符号的位置)。
这样做的效果是:dist('ABCD', 'ABCE') < dist('ABCD', 'EBCD')。

非常感谢,这看起来很有前途。在PostgreSQL的情境中,这可能需要将修改后的代码作为扩展加载。 - user1938139

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接