
Hmni
Nama fuzzy yang cocok dengan pembelajaran mesin. Lakukan tugas pencocokan nama fuzzy umum termasuk penilaian kesamaan, tautan rekaman, deduplikasi dan normalisasi.
HMNI dilatih pada dataset FirstName Latin yang ditransliterasikan secara internasional, di mana presisi diberikan prioritas.
| Model | Ketepatan | Presisi | Mengingat | F1-score |
|---|
| Hmni-latin | 0.9393 | 0.9255 | 0.7548 | 0.8315 |
Untuk pengantar metodologi dan penelitian di balik HMNI, silakan merujuk ke posting blog saya.
Persyaratan
Python 3.5–3.8
- Tensorflow
- scikit-learn
- fuzzywuzzy
- Abydos
- Unidecode
Panduan Penggunaan Cepat
Instalasi
Menggunakan PIP melalui PYPI
Inisialisasi objek pencocokan
import hmni
matcher = hmni . Matcher ( model = 'latin' )
Kesamaan pasangan tunggal
matcher . similarity ( 'Alan' , 'Al' )
# 0.6838303319889133
matcher . similarity ( 'Alan' , 'Al' , prob = False )
# 1
matcher . similarity ( 'Alan Turing' , 'Al Turing' , surname_first = False )
# 0.6838303319889133
Rekam hubungan
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' )Nama deduplikasi dan normalisasi
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']
Parameter pencocokan
hmni.matcher ( model = 'latin', prefilter = true, allow_alt_surname = true, allow_initials = true, allow_missing_components = true)
- Model (STR) - Model Statistik HMNI (Latin secara default)
- prefilter (bool) - jika pencocokan prefilter tidak mungkin kandidat (true secara default)
- ALLIVE_ALT_SURNAME (BOOL) - Jika pencocokan mempertimbangkan nama keluarga pencocokan fonetik misalnya Smith, Schmidt (true secara default)
- Izin_initials (bool) - Jika pencocokan mempertimbangkan nama dengan inisial (true secara default)
- Izin_missing_components (bool) - Jika pencocokan mempertimbangkan nama dengan komponen yang hilang (true secara default)
Metode pencocokan
kesamaan (name_a, name_b, prob = true, surname_first = false)
- name_a (str) - Nama depan untuk perbandingan
- name_b (str) - Nama kedua untuk perbandingan
- prob (bool) - Jika benar kembali probabilitas yang diprediksi, lain label kelas biner
- Threshold (float) - Prediksi probabilitas ambang batas untuk pertandingan positif (0,5 secara default)
- Keluarga_first (bool) - Jika string nama dimulai dengan nama keluarga (false secara default)
fuzzymerge (df1, df2, how = 'inner', on = none, left_on = none, right_on = tidak ada, indikator = false, limit = 1, threshold = 0.5, allow_exact_matches = true, surname_first = false)
- DF1 (Pandas DataFrame atau Named Series) - Objek pertama/kiri untuk digabungkan
- DF2 (PANDAS DataFrame atau Seri Bernama) - Objek kedua/kanan untuk bergabung
- bagaimana (str) - jenis penggabungan yang akan dilakukan
-
inner (default): Gunakan persimpangan kunci dari kedua bingkai, mirip dengan gabung dalam SQL; Pertahankan urutan tombol kiri -
left : Gunakan hanya tombol dari bingkai kiri, mirip dengan SQL Left Outer Join; Lindungi urutan utama -
right : Gunakan hanya kunci dari bingkai kanan, mirip dengan SQL Right Outer Goin; Lindungi urutan utama -
outer : Gunakan penyatuan kunci dari kedua bingkai, mirip dengan gabung luar SQL penuh; Urutkan tombol secara leksikografis
- ON (Label atau Daftar) - Nama level kolom atau indeks untuk bergabung. Ini harus ditemukan di kedua DataFrames
- Left_on (Label atau Daftar) - Nama Level Kolom atau Indeks Untuk Bergabung di DataFrame Kiri
- right_on (label atau daftar) - Nama level kolom atau indeks untuk bergabung di DataFrame kanan
- Indikator (BOOL) - Jika benar, menambahkan kolom ke output DataFrame yang disebut "_merge" dengan informasi pada sumber setiap baris (false secara default)
- Limit (int) - Jumlah teratas dari kecocokan nama yang perlu dipertimbangkan (1 secara default)
- Threshold (float) - Prediksi probabilitas ambang batas untuk pertandingan positif (0,5 secara default)
- Izin_exact_matches (bool) - jika benar memungkinkan penggabungan pada kecocokan nama yang tepat, kalau tidak, jangan pertimbangkan kecocokan yang tepat (true secara default)
- Keluarga_first (bool) - Jika string nama dimulai dengan nama keluarga (false secara default)
dedupe (nama, threshold = 0,5, simpan = 'terpanjang', reverse = true, limit = 3, ganti = false, surname_first = false)
- Nama (Daftar) - Daftar Nama ke Dedupe
- Threshold (float) - Prediksi probabilitas ambang batas untuk pertandingan positif (0,5 secara default)
- Keep (str) - Menentukan metode untuk menyimpan salah satu dari beberapa nama alternatif
-
longest (default): Menyimpan nama terpanjang -
frequent : menyimpan nama yang paling sering di daftar nama
- Reverse (bool) - Jika true akan mengurutkan kecocokan urutan menurun, selain itu naik (true secara default)
- Limit (int) - Jumlah teratas dari kecocokan nama yang perlu dipertimbangkan (3 secara default)
- ganti (bool) - Jika benar kembali daftar nama yang dinormalisasi, selain itu kembali daftar nama deduplikasi (false secara default)
- Keluarga_first (bool) - Jika string nama dimulai dengan nama keluarga (false secara default)
assign_similarity (name_a, name_b, skor)
- name_a (str) - Nama Depan untuk Penugasan Skor Kesamaan
- name_b (str) - Nama kedua untuk penugasan skor kesamaan
- SCORE (float) - Ditugaskan skor kesamaan untuk sepasang nama
Berkontribusi
Permintaan tarik dipersilakan. Untuk pengembang yang ingin membangun model menggunakan sistem penulisan Latin atau non-Latin (Cina, Cyrillic, Arab), Jupyter Notebook dibagikan dalam folder dev untuk membangun model menggunakan metode serupa.
Lisensi
Mit