Wie erhalte ich die Wahrscheinlichkeit, dass eine Zeichenfolge einer anderen Zeichenfolge in Python ähnelt?
Ich möchte einen Dezimalwert wie 0,9 (dh 90%) usw. erhalten. Am besten mit Standard-Python und -Bibliothek.
z.B
similar("Apple","Appel") #would have a high prob.
similar("Apple","Mango") #would have a lower prob.
python
probability
similarity
metric
Tenstar
quelle
quelle
Antworten:
Es ist ein eingebauter.
Es benutzen:
quelle
SequenceMatcher
vspython-Levenshtein
Modul. stackoverflow.com/questions/6690739/…get_close_matches
eingebautes, obwohl ich essorted(... key=lambda x: difflib.SequenceMatcher(None, x, search).ratio(), ...)
zuverlässiger fand, mit benutzerdefiniertensorted(... .get_matching_blocks())[-1] > min_match
Überprüfungenget_closest_matches
). Es ist eine praktische Funktion, nach der Sie vielleicht suchen. AKA, lesen Sie die Dokumente! In meiner speziellen Anwendung habe ich einige grundlegende Fehlerprüfungen / Berichte an den Benutzer durchgeführt, die schlechte Eingaben lieferten, und diese Antwort ermöglicht es mir, ihnen die möglichen Übereinstimmungen und die "Ähnlichkeit" zu melden . Wenn Sie die Ähnlichkeit jedoch nicht anzeigen müssen,get_closest_matches
Ich denke, vielleicht suchen Sie nach einem Algorithmus, der den Abstand zwischen Zeichenfolgen beschreibt. Hier sind einige, auf die Sie sich beziehen können:
quelle
Lösung 1: Python eingebaut
Verwenden Sie SequenceMatcher von difflib
Profis : native Python-Bibliothek, kein zusätzliches Paket erforderlich.
Beispiel :Nachteile : Zu begrenzt, es gibt so viele andere gute Algorithmen für die Ähnlichkeit von Zeichenfolgen.
Lösung 2: Quallen - Bibliothek
Es ist eine sehr gute Bibliothek mit guter Abdeckung und wenigen Ausgaben. Es unterstützt:
- Levenshtein-Distanz
- Damerau-Levenshtein-Distanz
- Jaro-Distanz
- Jaro-Winkler-Distanz
- Match-Rating-Ansatz-Vergleich
- Hamming-Distanz
Profis : einfach zu bedienen, Umfang der unterstützten Algorithmen, getestet.
Nachteile : keine native Bibliothek.
Beispiel :
quelle
Fuzzy Wuzzy
ist ein Paket , das die Levenshtein-Distanz in Python implementiert, mit einigen Hilfsfunktionen, die in bestimmten Situationen helfen, in denen zwei unterschiedliche Zeichenfolgen als identisch angesehen werden sollen. Zum Beispiel:quelle
Sie können eine Funktion erstellen wie:
quelle
if self.similar(search_string, item.text()) > 0.80:
funktioniert vorerst . Danke,Paket Abstand umfasst Levenshtein Abstand:
quelle
Das eingebaute Gerät
SequenceMatcher
ist bei großen Eingaben sehr langsam. So kann es mit Diff-Match-Patch gemacht werden :quelle
Beachten Sie, dass
difflib.SequenceMatcher
nur die längste zusammenhängende übereinstimmende Teilsequenz gefunden wird. Dies ist häufig nicht erwünscht, zum Beispiel:Das Finden der Ähnlichkeit zwischen zwei Strings hängt eng mit dem Konzept der paarweisen Sequenzausrichtung in der Bioinformatik zusammen. Hierfür gibt es viele dedizierte Bibliotheken, einschließlich Biopython . Dieses Beispiel implementiert den Needleman Wunsch-Algorithmus :
Die Verwendung von Biopython oder einem anderen Bioinformatik-Paket ist flexibler als jeder Teil der Python-Standardbibliothek, da viele verschiedene Bewertungsschemata und -algorithmen verfügbar sind. Außerdem können Sie die passenden Sequenzen abrufen, um zu visualisieren, was passiert:
quelle
Unter diesem Link finden Sie die meisten Methoden zur Textähnlichkeit und deren Berechnung: https://github.com/luozhouyang/python-string-similarity#python-string-similarity Hier einige Beispiele;
Normalisiert, metrisch, Ähnlichkeit und Entfernung
(Normalisierte) Ähnlichkeit und Entfernung
Metrische Abstände
quelle