回答:
最も近いのは、Janが彼の答えであるLevenstein の距離(一般に編集距離とも呼ばれる)に言及したようになります。
情報理論およびコンピューターサイエンスでは、レーベンシュタイン距離は、2つのシーケンス間の差を測定するための文字列メトリックです。非公式には、2つの単語間のレーベンシュタイン距離は、1つの単語を他の単語に変更するために必要な単一文字の編集(挿入、削除、または置換)の最小数です。
同様の単語を識別するために非常に一般的に使用されるメトリックです。Nltkには既に編集距離メトリックの実装があり、次の方法で呼び出すことができます。
import nltk
nltk.edit_distance("humpty", "dumpty")
上記のコードはを返します1
。2つの単語で異なるのは1文字のみです。
ここでの非常に良い応答とは別に、difflib pythonライブラリでSequenceMatcherを試すことができます。
https://docs.python.org/2/library/difflib.html
import difflib
a = 'Thanks for calling America Expansion'
b = 'Thanks for calling American Express'
seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 87.323943
次に、以下のコードを検討してください。
a = 'Thanks for calling American Expansion'
b = 'Thanks for calling American Express'
seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 88.88888
これで、d値を比較して類似性を評価できます。
辞書が大きすぎない場合、一般的なアプローチはレーベンシュタイン距離を取ることです。これは基本的に、ある単語から別の単語に到達するために必要な変更の数をカウントします。変更には、キャラクターの変更、キャラクターの削除、キャラクターの追加が含まれます。ウィキペディアの例:
lev(子猫、座っている)= 3
Wikibookに実装されているPythonを次に示します。
ただし、これらの距離を計算するアルゴリズムは安価ではありません。これを大規模に行う必要がある場合、一度に多くの単語の一致を見つける必要がある場合に、より高速で配布が簡単なバイグラムベクトルでコサイン類似性を使用する方法があります。ただし、これらはこの距離の近似値にすぎません。
比較のための古くからよく知られている手法は、Soundexアルゴリズムです。アイデアは、単語自体ではなく、それらが発音される方法の近似値を比較することです。これが実際にどの程度まで結果の品質を向上させるかはわかりません。
ただし、Soundexのようなものを音声テキスト認識エンジンの結果に適用するのは少し奇妙に感じます。最初に、単語の発音方法に関する情報を捨ててから、再度追加しようとします。これらの2つのフェーズを組み合わせることをお勧めします。
したがって、私はこの分野の最先端技術がそれを行うことを期待しており、例えばニューラルネットワークに基づいた何らかの形の適応分類であると考えています。Googleは、ニューラルネットワークを使用した音声認識に関する最近の調査結果を返します。