我正在尝试找到一种方法来构建模糊搜索,其中文本数据库和查询都可能具有拼写变体。特别是,文本数据库是从网络收集的材料,可能不会受益于全文引擎的准备阶段(词干) 我可以想象用pg_trgm作为起点然后验证Levenshtein的命中。 然而,人们倾向于做前缀查询例如,在音乐领域,我希望“beetho交响乐”是一个合理的搜索词。那么,有人在输入“betho symphony”,是否有合理的方法(使用带有tcl或perl脚本的postgresql)来发现“betho”部分应与“beetho”进行比较(返回编辑距离为1)< / p>
答案 0 :(得分:1)
我最终得到的是对常用算法的简单修改:通常我会从矩阵或向量对中选取最后一个值。参考http://en.wikipedia.org/wiki/Levenshtein_distance中的“迭代”算法,我将要探测的字符串作为第一个参数,将查询字符串作为第二个参数。现在,当算法结束时,结果列中的最小值给出了正确的结果
示例结果: 查询“fantas”,数据库中的单词“fantasy”,“fantastic”=&gt; 0 查询“fantas”,wor在数据库“fan”=&gt; 3
编辑距离的输入是从基于三元组相似性的“最多单词”列表中选择的单词
答案 1 :(得分:0)
您可以修改编辑距离算法,以便为字符串的后半部分提供较低的权重。
例如:对于每个i&amp; j,匹配(i,j)= 1 / max(i,j)^ 2而不是匹配(i,j)= 1。 (i和j是您要比较的符号的位置)。
这是做什么的:dist('ABCD','ABCE')&lt; dist('ABCD','EBCD')。