データベースに文字列テーブルがあります。私はそれらのうちの1つ、Aを選択します。ActiveRecordを使用して、最も近い一致(レベンション距離)に基づいて行を見つけることはできますか
テーブルの残りの部分を検索して、とよく似た文字列を見つける方法A?
データベースに文字列テーブルがあります。私はそれらのうちの1つ、Aを選択します。ActiveRecordを使用して、最も近い一致(レベンション距離)に基づいて行を見つけることはできますか
テーブルの残りの部分を検索して、とよく似た文字列を見つける方法A?
私はあなたがlevensteinの距離を探していると思います。 2文字列間のlevenstein距離は、文字列を等しくするためにcharを追加/削除/変更する必要があるかどうかです。
リンクを更新できますか? – ianstarz
@ianstarz done :) –
あなたは二つの文字列間の音声的類似の後にある場合は、SQLのSOUNDEX関数を(Oracleでmetaphoneのもある)を使用することができます。
これは、渡された文字列を、その単語の表音を表す4桁のコード(1文字、3数字iirc)に変換します。
比較する文字列の両方にこれを行うと、音声的に似ていれば、コードを一致させることができます。ここ
は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つの文字列を変換するために必要な操作の最小数、によって与えられます。単一の文字の挿入、削除、または置換です。
levenshtein( 'Propellerheads'、 'Proppelerheads')を実行しようとするとハングアップします。 – Andrei
どのような基準で最も類似していますか? –
誰かがそれに答えるための関数 "howSimilarIs(string、string)"の定義が必要です。定義が複雑な場合、それを実装することはおそらく大部分の作業です。 – tialaramex