2013-04-16 67 views
3

我想找到一种方法来建立一个模糊搜索,其中文本数据库和查询可能有拼写变体。特别是,文本数据库材料从网上收集,可能不会从全文引擎的准备阶段中受益(词干) 我能想象使用pg_trgm为出发点,然后由莱文斯坦验证命中。 但是,人们倾向于在音乐领域做前缀查询E.g,我期望“贝多芬交响曲”是一个合理的搜索术语。那么,是有人在输入“betho交响曲”,是有一个合理的方式(使用PostgreSQL有可能是TCL或Perl脚本)来发现的“betho”部分应以“beetho”相比较(返回为1的编辑距离)前缀相似性搜索

回答

0

您可以修改编辑距离算法以降低字符串的后部分的权重。例如:匹配(i,j)= 1/max(i,j)^ 2,而不是匹配(i,j)= 1,对于每个我来说都是如此。 (我和j是你正在比较的符号的位置)。

这样做是:DIST( 'ABCD', 'ABCE')< DIST( 'ABCD', 'EBCD')。

+0

感谢的话了很多 - 这看起来很有希望。在postgresql的情况下,它可能需要加载修改后的代码作为扩展 – user1938139

1

我结束了什么是常见算法的简单修改:通常我只想拿起从矩阵或向量对最后一个值。参照http://en.wikipedia.org/wiki/Levenshtein_distance中的“迭代”算法,我将字符串作为第一个参数进行探测,将查询字符串作为第二个参数。现在,当算法结束,在结果列中的最低值给出正确的结果

样品结果: 查询“fantas”,词语的数据库“幻想”,“神奇的” => 0 查询“fantas”, WOR数据库“粉丝” => 3

编辑距离的输入是基于三元相似性的“最字”列表中选择