2016-09-20 3 views
1

Ich arbeite mit Fuzzy Wuzzy in Python und während es behauptet, dass es mit einem Levenshtein Abstand arbeitet, finde ich, dass viele Strings mit einem einzigen Zeichen unterschiedliche Ergebnisse produzieren. Beispielsweise.Pythons Fuzzywuzzy liefert unvorhersagbare Ergebnisse

>>>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 

Ich denke, levenshtein Abstand gleich sein sollte, da es ein einzelne Zeichen Abstand in allen Beispielen ist, aber ich verstehe, das ist nicht einfach erreichbar, es irgendeine Art von „Gleichheit Prozentsatz“ ist von einer Art.

Ich habe versucht zu verstehen, wie es funktioniert, aber ich kann nicht zu verstehen scheinen. Meine sehr lange Saite gibt eine 97 und die sehr kurze 67. Ich denke, es würde bedeuten, je größer die Saite ist, desto geringer ist die Auswirkung auf ein einzelnes Zeichen. Jedoch für den "vendedor", "vendedora" und "estagiário", "estagiária" Beispiel ist das nicht der Fall, da letzterer größer als der erstere ist.

Wie funktioniert das?

Ich bin gerade dabei, Benutzereingabe Jobtitel, versuchen, falsch eingegebene Namen mit korrekt eingegebenen Namen usw. zu verbinden gibt es ein besseres Paket für meine Aufgabe?

+2

'fuzz.ratio' gibt einen Prozentsatz der Ähnlichkeit der Strings basierend auf der Levenshtein-Distanz zurück. –

Antwort

3

Sie haben Recht, wie fuzzywuzzy im Allgemeinen funktioniert. Eine größere Ausgangsnummer aus der fuzz.ratio-Funktion bedeutet, dass die Strings näher beieinander liegen (wobei eine 100 eine perfekte Übereinstimmung ist). Ich habe ein paar zusätzliche Testfälle durchgeführt, um zu sehen, wie es funktioniert. Hier sind sie:

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 

Aus diesen Tests können wir sehen, dass eine Reihe ersetzt hat einen größeren Effekt auf die Verhältnisberechnung als einen Brief Zugabe (aus diesem Grund estagiário/estagiária war weniger ein Spiel als vendedor/vendedora , obwohl länger sein). Gemäß this kann das Paket auch verwendet werden, um automatisch die beste Auswahl aus einer Liste möglicher Übereinstimmungen auszuwählen, und daher denke ich, dass es eine gute Wahl für Ihren beabsichtigten Zweck wäre.

Verwandte Themen