在Ruby中检测类似的字符串。

时间:2012-10-30 08:06:04

标签: ruby-on-rails ruby include

在我的数据库中,有条目例如。 Тормозной диск数组中的Диски тормозные LPRart_groups_arr等。我想找到与Тормозной диск类似的所有条目,例如Диски тормозные LPR

此代码:

art_groups_arr.each do |artgrarr|
  if n2.art_group.include?(artgrarr)
    non_original << n2
  end
end
显然,

找不到它们。我怎样才能找到那些相似的字符串?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式,例如:

art_groups_arr.each do |art_gr_arr|
  if n2.art_group.any? { |element|
    /ормозн/ =~ element and /диск/ =~ element
  } then non_original << n2 end
end

或者,you can try out fuzz_ball gem声称实施Smith-Waterman算法。

require 'fuzz_ball'
THRESHOLD_SCORE = 0.75
MATCHER = FuzzBall::Searcher.new [ 'Тормозной диск LPR' ]

def complies?( str )
  matchdata = MATCHER.search str
  return false if matchdata.nil? or matchdata.empty?
  score = matchdata[0][:score]
  puts "score is #{score}"
  score > THRESHOLD_SCORE
end

art_groups_arr.each do |art_gr_arr|
  if n2.art_group.any? { |element| complies? element } then
    non_original << n2
  end
end

对于'Диски тормозные LPR',您得分0.861,您必须调整阈值。