【问题标题】:Fuzzy String search: To find one string among any subtring of another模糊字符串搜索:在另一个字符串的任何子字符串中查找一个字符串
【发布时间】:2014-11-10 03:35:55
【问题描述】:

我想在较大的字符串中找出一个具有一定 Levenshtein 距离的字符串。我已经编写了用于查找两个字符串之间距离的代码,但是当我想找到一些具有固定 Levenshtein 距离的子字符串时想要有效地实现。

module Levenshtein

  def self.distance(a, b)
    a, b = a.downcase, b.downcase
    costs = Array(0..b.length) # i == 0
    (1..a.length).each do |i|
      costs[0], nw = i, i - 1  # j == 0; nw is lev(i-1, j)
      (1..b.length).each do |j|
        costs[j], nw = [costs[j] + 1, costs[j-1] + 1, a[i-1] == b[j-1] ? nw : nw + 1].min, costs[j]
      end
    end
    costs[b.length]
  end

  def self.test
    %w{kitten sitting saturday sunday rosettacode raisethysword}.each_slice(2) do |a, b|
      puts "distance(#{a}, #{b}) = #{distance(a, b)}"
    end
  end

end

【问题讨论】:

    标签: ruby-on-rails fuzzy-search fuzzy-logic


    【解决方案1】:

    检查TRE library,它确实做到了这一点(在 C 中),而且非常有效。现在仔细看一下匹配函数,基本上是 500 行不可读(但必要)的代码。

    我想说的是,与其推出自己的版本,而且前提是您不打算阅读有关该主题的所有非常困难论文(搜索“近似字符串匹配”)并且不要没有几个月的空闲时间来研究这个主题,你最好在图书馆本身周围写一个小包装。与在 C 中获得的相比,您的 Ruby 版本无论如何都会低效。

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 2022-06-17
      • 2019-08-26
      • 2013-01-18
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多