2016-09-20 10 views
1

ファジーのファジーで作業していて、それがlevenshtein距離で動作すると主張している間に、1つの文字が異なる多くの文字列が異なる結果を生成することがわかりました。例えば。Pythonのファジーファジーが予期しない結果を返す

>>>fuzz.ratio("vendedor","vendedora") 
94 
>>>fuzz.ratio("estagiário","estagiária") 
90 
>>> fuzz.ratio("abcdefghijlmnopqrst","abcdefghijlmnopqrsty") 
97 
>>>fuzz.ratio("abc","abcd") 
86 
>>>fuzz.ratio("a","ab") 
67 

私はすべての例では、単一の文字の距離があるようレーベンシュタイン距離が同じである必要があります推測するが、私はこれは単純な距離ではありません理解し、それはある種の「平等の割合」のいくつかの並べ替えです。

どのように動作するのか理解しようとしましたが、わかりません。私の非常に長いストリングは97と非常に短い67を与えます。ストリングが大きいほど、1文字に与える影響は少なくなります。しかし、 "vendedor"、 "vendora"、 "estagiário"、 "estagiária"の例では、後者が前者よりも大きいので、そうではありません。

これはどのように機能しますか?

私は現在、ユーザー入力の仕事のタイトルと一致しています。正しく入力された名前などでミスタイプされた名前を接続しようとしています。

+2

'fuzz.ratio'は、文字列の類似度をlevenshtein距離に基づいて返します。 –

答えて

3

ファジーファジーの一般的な動作については正しいです。 fuzz.ratio関数からのより大きい出力番号は、文字列がお互いに近いことを意味します(100が完全一致)。私はそれがどのように働いたかを調べるためにいくつかの追加のテストケースを実行しました。ここで彼らは、次のとおりです。これらの試験の

fuzz.ratio("abc", "abce") #to show which extra letter doesn't matter. 
86 
fuzz.ratio("abcd", "abce") #to show that replacing a number is worse than adding. 
75 
fuzz.ratio("abc", "abc") #to find what a match gives. 
100 

、私たちは番号を交換して、文字を追加するよりも比率計算に大きな影響を持っていることがわかります(estagiário/estagiáriaがvendedor/vendedoraよりも試合の少なかった理由です、長くても)。 thisによれば、このパッケージは可能性のある一致のリストから最良の選択肢を自動的に選択するためにも使用することができ、それはあなたの意図する目的に適した選択であると思う。

関連する問題