【问题标题】:prefix similarity search前缀相似度搜索
【发布时间】:2013-04-09 05:25:26
【问题描述】:

我正在尝试找到一种方法来构建模糊搜索,其中文本数据库和查询都可能具有拼写变体。特别是,文本数据库是从网络收集的材料,可能不会从全文引擎的准备阶段(词干)中受益 我可以想象使用 pg_trgm 作为起点,然后验证 Levenshtein 的命中。 然而,人们倾向于做前缀查询,例如,在音乐领域,我希望“beetho symphony”是一个合理的搜索词。那么,是否有人在输入“betho symphony”,是否有一种合理的方式(使用带有 tcl 或 perl 脚本的 postgresql)来发现“betho”部分应该与“beetho”进行比较(返回 1 的编辑距离)

【问题讨论】:

    标签: algorithm postgresql fuzzy-search


    【解决方案1】:

    我最终得到的是对通用算法的简单修改:通常我会从矩阵或向量对中获取最后一个值。参考http://en.wikipedia.org/wiki/Levenshtein_distance 中的“迭代”算法,我将要探测的字符串作为第一个参数,将查询字符串作为第二个参数。现在,当算法完成时,结果列中的最小值给出了正确的结果

    示例结果: 查询“fantas”,数据库中的单词“fantasy”,“fantastic” => 0 查询“fantas”,在数据库“fan”中工作 => 3

    编辑距离的输入是从基于三元相似度的“大多数单词”列表中选择的单词

    【讨论】:

      【解决方案2】:

      您可以修改编辑距离算法,为字符串的后半部分赋予较低的权重。

      例如:对于每个 i&j,Match(i,j) = 1/max(i,j)^2 而不是 Match(i,j)=1。 (i 和 j 是您要比较的符号的位置)。

      它的作用是:dist('ABCD', 'ABCE')

      【讨论】:

      • 非常感谢 - 这看起来很有希望。在 postgresql 的上下文中,它可能需要将修改后的代码作为扩展加载
      猜你喜欢
      • 2018-10-09
      • 2010-11-02
      • 2011-06-25
      • 2010-11-21
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      相关资源
      最近更新 更多