1

私のデータベースには、たとえばエントリがあります。Тормозной дискДиски тормозные LPRなどart_groups_arrТормозной дискに似たすべてのエントリを検索したいДиски тормозные LPR

このコード:

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

明らかにそれらを見つけられません。これらの類似の文字列を見つけるにはどうすればよいですか?

4

1 に答える 1

1

たとえば、正規表現を使用できます。

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

または、Smith-Waterman アルゴリズムを実装すると主張するfuzz_ball gem を試すこともできます。

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'score を取得するには0.861、しきい値を調整する必要があります。

于 2012-10-30T09:15:30.187 に答える