Ich habe versucht, die "Lebenstein-Distanz" mit Python zu berechnen

Was ist die Levenstein Entfernung?

** Levenshtein Abstand ** gibt an, wie unterschiedlich die beiden Saiten sind. Wird auch als Bearbeitungsabstand bezeichnet. Ein einzelnes Zeichen ** Einfügen / Löschen / Ersetzen ** definiert die Mindestanzahl von Schritten, die erforderlich sind, um eine Zeichenfolge in die andere umzuwandeln. Referenz: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3 % 83% A5% E3% 82% BF% E3% 82% A4% E3% 83% B3% E8% B7% 9D% E9% 9B% A2)

Vorbereitung

Die Umgebung verwendet Google Colaboratory. Die Python-Version ist unten.

import platform
print("python " + platform.python_version())
# python 3.6.9

Zusätzlich muss die Bibliothek zur Berechnung der Levenstein-Distanz im Voraus installiert werden.

pip install python-Levenshtein

Berechnen wir die Levenstein-Entfernung

Jetzt schreiben wir den Code. Importieren Sie zunächst die Bibliothek zur Berechnung der Levenstein-Entfernung.

import Levenshtein

Berechnen wir als Versuch den Levenstein-Abstand zwischen "Rievenstein" und "Levenshtein".

#Berechnen Sie die Levenstein-Entfernung
Levenshtein.distance('Rievenstein', 'Levenshtein')
# 3

Das Ergebnis war 3. das ist,

Dies liegt daran, dass ich die Operation dreimal durchgeführt habe.

Sie können unten überprüfen, welche Art von Operation Sie ausgeführt haben.

Levenshtein.editops('Rievenstein', 'Levenshtein')
# [('delete', 0, 0), ('replace', 1, 0), ('insert', 7, 6)]

Der hier angezeigte Inhalt ist (Operation ausgeführt, welches Zahlenzeichen in der ersten Zeichenfolge, welche Nummer in der zweiten Zeichenfolge) ist. Mit anderen Worten

  • Rievensteins 0. Buchstabe entfernt (R)
  • Ersetzte den ersten Buchstaben (i) von Rievenstein durch den 0. Buchstaben (L) von Levenshtein
  • Fügen Sie den 6. Buchstaben (h) von Levenshtein an der Stelle des 7. Buchstabens (t) von Rievenstein ein

Es bedeutet das.

Sie können auch die Ähnlichkeit Ihrer Ähnlichkeit berechnen, nicht die Häufigkeit, mit der Sie die Operation ausgeführt haben.

Levenshtein.ratio('Rievenstein', 'Levenshtein')
# 0.8181818181818182

Wenn mehrere Zeichenfolgen vorhanden sind, können Sie auch die Zeichenfolge extrahieren, die den Mittelpunkt der Zeichenfolgen darstellt.

Levenshtein.median(['Rievenstein',
                    'Levenshtein',
                    'Revenshtein',
                    'Lievenstein',
                    'Levenshtain',
                    'Levennshtein'])
# 'Levenshtein'

Anderer Bearbeitungsabstand

Summende Distanz

Der Hamming-Abstand ist die Anzahl der verschiedenen Zeichen an den entsprechenden Positionen in zwei Zeichenfolgen mit ** gleicher Anzahl von Zeichen **. Referenz: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E8%B7%9D%E9 % 9B% A2)

Dies kann auch mit derselben Bibliothek berechnet werden.

Levenshtein.hamming('Rievenstein', 'Levenshtein')
# 7

Die Brummentfernung vergleicht Rievenstein- und Levenshtein-Saiten nur mit Zeichen an derselben Stelle. Es wird wie folgt sein.

  • ** R ** ievenstein und ** L ** sogar shtein → unterschiedlich --R i </ strong> Evenstein und L e </ strong> venshtein → unterschiedlich --Ri e </ strong> venstein und Le v </ strong> enshtein → unterschiedlich
  • … --Revenstei n </ strong> und Levenshtei n </ strong> → gleich

Wenn man es so betrachtet, wird der Brummabstand als 7 ausgegeben, da die 7 Zeichen mit Ausnahme des letzten "Teins" unterschiedlich sind.

Der Brummabstand muss ** gleich groß sein. ** Ein Fehler tritt auf, wenn die Anzahl der Zeichen unterschiedlich ist.

Jaro Winkler Entfernung

Es gibt auch die Jaro-Winkler-Distanz, die die teilweise Übereinstimmung zwischen zwei Saiten misst. Je näher es an 1 liegt, desto ähnlicher ist es und je näher es an 0 ist, desto unterschiedlicher ist es. Es scheint verwendet zu werden, um Rechtschreibfehler zu beurteilen.

Levenshtein.jaro_winkler('Rievenstein', 'Levenshtein')
# 0.8787878787878789

Zusammenfassung

Ich habe Python verwendet, um die Levenstein-Entfernung zu berechnen. Ich habe auch die Humming-Distanz und die Jaro Winkler-Distanz als andere Bearbeitungsentfernungen berechnet. Berechnen Sie auf jeden Fall den Bearbeitungsabstand verschiedener ähnlicher Zeichenketten und die Ähnlichkeit.

Einzelheiten zu der diesmal verwendeten Bibliothek finden Sie im Folgenden. https://rawgit.com/ztane/python-Levenshtein/master/docs/Levenshtein.html#Levenshtein-median

Recommended Posts