2009-07-22 11 views
1

データベースに文字列テーブルがあります。私はそれらのうちの1つ、Aを選択します。ActiveRecordを使用して、最も近い一致(レベンション距離)に基づいて行を見つけることはできますか

テーブルの残りの部分を検索して、とよく似た文字列を見つける方法A

+0

どのような基準で最も類似していますか? –

+0

誰かがそれに答えるための関数 "howSimilarIs(string、string)"の定義が必要です。定義が複雑な場合、それを実装することはおそらく大部分の作業です。 – tialaramex

答えて

3

私はあなたがlevensteinの距離を探していると思います。 2文字列間のlevenstein距離は、文字列を等しくするためにcharを追加/削除/変更する必要があるかどうかです。

Here's an implementation in Ruby

+0

リンクを更新できますか? – ianstarz

+1

@ianstarz done :) –

0

あなたは二つの文字列間の音声的類似の後にある場合は、SQLのSOUNDEX関数を(Oracleでmetaphoneのもある)を使用することができます。

これは、渡された文字列を、その単語の表音を表す4桁のコード(1文字、3数字iirc)に変換します。

比較する文字列の両方にこれを行うと、音声的に似ていれば、コードを一致させることができます。ここ

0

はRubyでレーベンシュタイン距離アルゴリズムの単純な実装である:

def levenshtein(a, b) 
    case 
    when a.empty?: b.length 
    when b.empty?: a.length 
    else [(a[0] == b[0] ? 0 : 1) + levenshtein(a[1..-1], b[1..-1]), 
      1 + levenshtein(a[1..-1], b), 
      1 + levenshtein(a, b[1..-1])].min 
    end 
end 

二つの文字列間のレーベンシュタイン距離は、操作の他に1つの文字列を変換するために必要な操作の最小数、によって与えられます。単一の文字の挿入、削除、または置換です。

+0

levenshtein( 'Propellerheads'、 'Proppelerheads')を実行しようとするとハングアップします。 – Andrei

関連する問題