Namensidentifikation mit Python

Mittel zur Namensidentifikation

Verwenden Sie den Levenstein-Abstand. "Lebensstein-Distanz" wird auch als "Bearbeitungsdistanz" bezeichnet. Dies ist die Mindestanzahl von Schritten, die erforderlich sind, um eine Zeichenfolge in die andere Zeichenfolge umzuwandeln, indem ein Zeichen "eingefügt", "gelöscht" und "ersetzt" wird.

Zum Beispiel von "Katze" bis "Schnitt" cat c tcut to`` adelete,uinsert"2`. Es ist leicht zu glauben, dass der Levenstein-Abstand "1" ist, da Sie die Substitution verwenden können.

Weitere Informationen finden Sie unter [Wiki](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3 Siehe% 83% A5% E3% 82% BF% E3% 82% A4% E3% 83% B3% E8% B7% 9D% E9% 9B% A2). In diesem Tutorial werden wir schließlich die Namen identifizieren, während wir einige Experimente durchführen.

Experiment 1. Verwenden wir "Lebenstein Distance"

test0


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
cates = ['kome']

for val in target:
    nearL_flag = False
    for cate in cates:
        if Levenshtein.distance(val, cate) < 1:   #Wenn der Referenz-Levenstein-Abstand kleiner als 1 ist, das heißt, auch wenn er etwas anders ist, werfen Sie ihn in Kategorien.
            nearL_flag = True
    if not nearL_flag:
        cates.append(val)
cates

output


['kome', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']

Das Programm ist so, dass alle Elemente mit einem Referenz-Levenstein-Abstand von "1" oder mehr "Kategorien" eingeben. Wir werden es basierend darauf umgestalten. Erhöhen Sie zunächst schrittweise den Abstand und beobachten Sie, was mit dem Ausgang passiert.

Experiment 1. Erhöhen Sie den Referenz-Levenstein-Abstand (tolerieren Sie Mehrdeutigkeiten)

test1


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']

for i in range(10):
    cates = ['kome']
    for val in target:
        nearL_flag = False
        for cate in cates:
            if Levenshtein.distance(val, cate) < i:
                nearL_flag = True
        if not nearL_flag:
            cates.append(val)
    print(i, cates)

output



0 ['kome', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
1 ['kome', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
2 ['kome', 'oniku_a', 'yasai_a']
3 ['kome', 'oniku_a', 'yasai_a']
4 ['kome', 'oniku_a', 'yasai_a']
5 ['kome', 'oniku_a', 'yasai_a']
6 ['kome', 'oniku_a', 'yasai_b']
7 ['kome', 'yasai_a']
8 ['kome']
9 ['kome']

Aus diesem Ausgabeergebnis ist ersichtlich, dass Mehrdeutigkeit zulässig ist, wenn der Levenstein-Abstand vergrößert wird. Zum Beispiel, ob "oniku_a" und "oniku_b" als dieselbe Klassifizierung betrachtet werden sollen. Wenn der Referenz-Levenstein-Abstand klein ist, wird er "als unterschiedlich angesehen". Wenn der Levenstein-Referenzabstand groß ist, "Nun, betrachten wir ihn als gleich".

Aus dem obigen Ausgabeergebnis scheint es auch gut zu sein, die anfängliche Liste der Kategorien auf "['kome', 'oniku', 'yasai']" anstelle von "['kome']" zu setzen.

Experiment 2. Ändern Sie den Anfangswert in "[" kome "," oniku "," yasai "] und versuchen Sie, den Namen zu identifizieren.

test2


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']

for i in range(10):
    cates = ['kome', 'oniku', 'yasai']
    for val in target:
        nearL_flag = False
        for cate in cates:
            if Levenshtein.distance(val, cate) < i:
                nearL_flag = True
        if not nearL_flag:
            cates.append(val)
    print(i, cates)

output


0 ['kome', 'oniku', 'yasai', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
1 ['kome', 'oniku', 'yasai', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
2 ['kome', 'oniku', 'yasai', 'oniku_a', 'yasai_a']
3 ['kome', 'oniku', 'yasai']
4 ['kome', 'oniku', 'yasai']
5 ['kome', 'oniku', 'yasai']
6 ['kome', 'oniku', 'yasai']
7 ['kome', 'oniku', 'yasai']
8 ['kome', 'oniku', 'yasai']
9 ['kome', 'oniku', 'yasai']

Von oben, für dieses "Ziel", cates Anfangswert: "['kome', 'oniku', 'yasai']", es wurde festgestellt, dass der Name mit einem Levenstein-Abstand von weniger als "3" identifiziert werden kann.

Dann ist es schließlich ein Namensidentifizierungsprogramm.

Programm zur Identifizierung von Namen

nayose


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
cates = ['kome', 'oniku', 'yasai']

nayose = []

for val in target:
    minL = 100
    afterNayose = 'dummy'
    for cate in cates:
        tmp_distance = Levenshtein.distance(val, cate)
        if tmp_distance < minL:
            minL = tmp_distance
            afterNayose = cate
    nayose.append(afterNayose)

[(before, after, Levenshtein.distance(before, after)) for before, after in zip(target, nayose)]

output


[('oniku_a', 'oniku', 2),
 ('oniku_b', 'oniku', 2),
 ('oniku_c', 'oniku', 2),
 ('yasai_a', 'yasai', 2),
 ('yasai_b', 'yasai', 2),
 ('yasai_c', 'yasai', 2)]

Die Art und Weise, die Ausgabe zu lesen, ist ("vor", "nach", "vor und nach der Levenstein-Distanz"). Es kann bestätigt werden, dass der Levenstein-Abstand kleiner als "3" ist und der Name identifiziert werden kann.

Recommended Posts

Namensidentifikation mit Python
Starten Sie Python
Scraping mit Python
Bearbeiten Sie Redmine mit Python Redmine
Datenbereinigung mit Python
WiringPi-SPI-Kommunikation mit Python
Altersberechnung mit Python
Suchen Sie Twitter mit Python
Hinweise zur Verwendung von Python-Unterprozessen
Versuchen Sie es mit Tweepy [Python2.7]
Python-Memo mit perl-ternärem Operator
Mit Python abflachen
Scraping mit Python 3.5 async / await
Speichern Sie Bilder mit Python3-Anforderungen
[S3] CRUD mit S3 unter Verwendung von Python [Python]
Python "if __name__ ==" __main__ ":" bedeutet
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Versuchen Sie es mit Kubernetes Client -Python-
[Python] if __name__ == Was ist '__ main__' :?
Python-Notizen zur Verwendung von Perl-Spezialvariablen
[Python] Verwenden von OpenCV mit Python (Basic)
Scraping mit Python 3.5 Async-Syntax
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
Suchalgorithmus mit word2vec [Python]
Ändern Sie die Python-Version mit pyenv
Python: Grundlagen der Verwendung von Scikit-Learn ①
# 1 [python3] Einfache Berechnung mit Variablen
Instrumentensteuerung mit Python [pyvisa]
Bearbeiten Sie Tabellenkalkulationen lokal mit Python
Python-Memo mit Perl --join
[Python] Validierung von JSON mit Voluptuous
Datenanalyse mit Python-Pandas
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
Verwenden von OpenCV mit Python @Mac
[Python] Schießspiel mit Pyxel
Senden Sie mit Python mit Google Mail
[Python3] Formatieren Sie die Zeichenfolge mit dem Variablennamen als Schlüssel
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Vervollständigung von Python mit Emacs mit Company-Jedi
So installieren Sie Python mit Anaconda
Initialisierung globaler Variablen mit Python-Dekoratoren
[Python] Laden von CSV-Dateien mit Pandas
Python Hinweis: Über den Vergleich mit is
[Ubuntu] [Python] Objektverfolgung mit dlib
__Name__
Bilderfassung von Firefox mit Python
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Datenerfassung mit Python Googlemap API
Python
Verwenden von Rstan aus Python mit PypeR
Erstellen Sie mit tkinter eine Python-GUI
Python: Einführung in Flask: Erstellen einer Nummernidentifizierungs-App mit MNIST
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
[Python] Verwenden von OpenCV mit Python (Bildtransformation)