
Hmni
Fuzzy -Name, der mit maschinellem Lernen übereinstimmt. Führen Sie gemeinsame Fuzzy -Name -Matching -Aufgaben wie Ähnlichkeitsbewertung, Datensatzverbindung, Deduplizierung und Normalisierung durch.
HMNI wird in einem international transliterierten lateinischen FirstName-Datensatz geschult, in dem Präzision Priorität ermöglicht.
| Modell | Genauigkeit | Präzision | Abrufen | F1-Score |
|---|
| Hmni-Latin | 0,9393 | 0,9255 | 0,7548 | 0,8315 |
Eine Einführung in die Methodik und Forschung hinter HMNI finden Sie in meinem Blog -Beitrag.
Anforderungen
Python 3,5–3,8
- Tensorflow
- Scikit-Learn
- Fuzzywuzzy
- Abydos
- Unidecode
Schnellnutzungsanleitung
Installation
Verwenden Sie PIP über PYPI
Initialisieren Sie ein Matcher -Objekt
import hmni
matcher = hmni . Matcher ( model = 'latin' )
Einzelpaar Ähnlichkeit
matcher . similarity ( 'Alan' , 'Al' )
# 0.6838303319889133
matcher . similarity ( 'Alan' , 'Al' , prob = False )
# 1
matcher . similarity ( 'Alan Turing' , 'Al Turing' , surname_first = False )
# 0.6838303319889133
Aufzeichnungsverknüpfung
import pandas as pd
df1 = pd . DataFrame ({ 'name' : [ 'Al' , 'Mark' , 'James' , 'Harold' ]})
df2 = pd . DataFrame ({ 'name' : [ 'Mark' , 'Alan' , 'James' , 'Harold' ]})
merged = matcher . fuzzymerge ( df1 , df2 , how = 'left' , on = 'name' )Nennen Sie die Deduplizierung und Normalisierung
names_list = [ 'Alan' , 'Al' , 'Al' , 'James' ]
matcher . dedupe ( names_list , keep = 'longest' )
# ['Alan', 'James']
matcher . dedupe ( names_list , keep = 'frequent' )
# ['Al, 'James']
matcher . dedupe ( names_list , keep = 'longest' , replace = True )
# ['Alan, 'Alan', 'Alan', 'James']
Matcher -Parameter
hmni.matcher ( model = 'latin', prefilter = true, degling_alt_surname = true, degling_initials = true, degling_missing_components = true)
- Modell (STR) - HMNI Statistisches Modell (standardmäßig lateinisch)
- Prefilter (BOOL) - Sollte der Match -Präfilter die Kandidaten unwahrscheinlich (standardmäßig wahr)
- ALLGESTELLTE_ALT_SURNAME (BOOL) - Sollte der Matcher phonetische passende Nachnamen in Betracht ziehen , z. B. Schmidt (standardmäßig wahr)
- Den_initials (BOOL) - Sollte der Matcher Namen mit Initialen betrachten (standardmäßig wahr)
- ALLGEALTE_MISSING_COMPONENTEN (BOOL) - Sollte der Matcher Namen mit fehlenden Komponenten betrachten (standardmäßig true)
Matcher -Methoden
Ähnlichkeit (name_a, name_b, prob = true, surname_first = false)
- NAME_A (STR) - Vorname zum Vergleich
- NAME_B (STR) - Zweiter Name zum Vergleich
- prob (bool) - wenn wahr zurückgibt eine vorhergesagte Wahrscheinlichkeit, sonst binäre Klassenbezeichnung
- Schwellenwert (Float) - Vorhersagewahrscheinlichkeitsschwelle für positive Übereinstimmung (standardmäßig 0,5)
- Nachname_First (BOOL) - Wenn Name Zeichenfolgen mit dem Nachnamen beginnen (standardmäßig falsch)
fuzzymerge (df1, df2, wie = 'innere', auf = none, links_on = none, right_on = none, Indicator = false, limit = 1, drieshold = 0,5, degling_exact_matches = true, Nachname_first = false)
- DF1 (Pandas DataFrame oder Named Series) - First/Links -Objekt, mit dem man sich verschmolz, mit
- DF2 (Pandas DataFrame oder Named Series) - zweites/richtiges Objekt, mit dem Sie zusammenarbeiten können
- Wie (STR) - Art der Verschmelzung durchgeführt werden muss
-
inner (Standard): Verwenden Sie die Schnittstelle von Schlüssel aus beiden Frames, ähnlich wie bei einem SQL Inner -Join; Bewahren Sie die Reihenfolge der linken Schlüssel auf -
left : Verwenden Sie nur Schlüssel aus dem linken Rahmen, ähnlich wie eine SQL Link Outer Jou. Schlüsselreihenfolge bewahren -
right : Verwenden Sie nur Schlüssel aus dem rechten Rahmen, ähnlich wie bei einem SQL Right Outer Join. Schlüsselreihenfolge bewahren -
outer : Verwenden Sie die Vereinigung von Schlüssel aus beiden Frames, ähnlich wie eine SQL Full Outer Join; Sortieren Sie die Schlüssel lexikographisch
- auf (Beschriftung oder Liste) - Spalten- oder Indexebenenamen zum Mitbeschluss. Diese müssen in beiden Datenrahmen gefunden werden
- Left_on (Beschriftung oder Liste) - Spalten- oder Indexstufennamen, die im linken Datenrahmen angeschlossen werden sollen
- Right_on (Beschriftung oder Liste) - Spalten- oder Indexebenenamen, die im rechten Datenrahmen angeschlossen werden sollen
- Anzeige (BOOL) - Wenn True true, fügt eine Spalte zum Ausgabedatenrahmen mit dem Namen "_merge" mit Informationen über die Quelle jeder Zeile hinzu (standardmäßig falsch).
- Limit (int) - obere Anzahl der zu beachtenden Namensübereinstimmungen (1 standardmäßig)
- Schwellenwert (Float) - Vorhersagewahrscheinlichkeitsschwelle für positive Übereinstimmung (standardmäßig 0,5)
- ALLGESTELLUNGEN_EXACT_MATCHES (BOOL) - Wenn True TRUE das Verschmelzen von genauen Namensübereinstimmungen ermöglichen, betrachten Sie sonst nicht genaue Übereinstimmungen (standardmäßig True).
- Nachname_First (BOOL) - Wenn Name Zeichenfolgen mit dem Nachnamen beginnen (standardmäßig falsch)
Dedupe (Namen, Schwellenwert = 0,5, Keep = 'längst', Reverse = True, Limit = 3, Ersatz = False, Nachname_First = False)
- Namen (Liste) - Liste der Namen zu Dedupe
- Schwellenwert (Float) - Vorhersagewahrscheinlichkeitsschwelle für positive Übereinstimmung (standardmäßig 0,5)
- Keep (STR) - Gibt die Methode an, um einen von mehreren alternativen Namen aufrechtzuerhalten
-
longest (Standard): Hält den längsten Namen -
frequent : Halten Sie den häufigsten Namen in der Namensliste
- Reverse (BOOL) - Wenn True sortiert wird, übereinstimmende Reihenfolge der absteigender Reihenfolge, sonst aufsteigend (standardmäßig wahr)
- Limit (int) - obere Anzahl der zu beachtenden Namensübereinstimmungen (3 standardmäßig)
- Ersetzen (BOOL) - Wenn die Liste der trugen zurückgegebenen Normalisierungsnamenliste anwesend zurückgibt, geben Sie die deduplizierte Namensliste zurück (standardmäßig falsch).
- Nachname_First (BOOL) - Wenn Name Zeichenfolgen mit dem Nachnamen beginnen (standardmäßig falsch)
AUFTRAGUNG_SIMILARITY (NAME_A, NAME_B, SCORE)
- NAME_A (STR) - Vorname für Ähnlichkeitsbewertungszuweisung
- NAME_B (STR) - Zweiter Name für Ähnlichkeitsbewertungszuweisung
- Score (Float) - Zugewiesene Ähnlichkeitsbewertung für ein Namenspaar
Beitragen
Pull -Anfragen sind willkommen. Für Entwickler, die ein Modell mit lateinischen oder nicht-latinischen Schreibsystemen (chinesischer, kyrillisch, arabisch) erstellen möchten, werden Jupyter-Notizbücher im dev gemeinsam genutzt, um Modelle mit ähnlichen Methoden zu erstellen.
Lizenz
MIT