3

私はpythonでfuzzy wuzzyを使用していますが、レーベンシュタイン距離で機能すると主張していますが、1文字が異なる多くの文字列が異なる結果をもたらすことがわかりました。例えば。

>>>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 つの文字への影響が少ないことを意味すると思います。ただし、「vendor」、「vendedora」、および「estagiário」、「estagiária」の例では、後者が前者よりも大きいため、そうではありません。

これはどのように作動しますか?

現在、ユーザー入力の役職を照合し、入力ミスした名前を正しく入力された名前に関連付けようとしています。私のタスクに適したパッケージはありますか?

4

1 に答える 1

3

fuzzywuzzy が一般的にどのように機能するかについては正しいです。関数からの出力数値が大きいほど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 が vendor/vendedora よりも一致しなかった理由です)。thisによると、パッケージを使用して、可能な一致のリストから最適な選択肢を自動選択することもできるため、意図した目的には適していると思います.

于 2016-09-20T15:26:04.483 に答える