
hmni
การจับคู่ชื่อฟัซซี่กับการเรียนรู้ของเครื่อง ดำเนินงานการจับคู่ชื่อฟัซซี่ทั่วไปรวมถึงการให้คะแนนความคล้ายคลึงกันการเชื่อมโยงบันทึกการขจัดข้อมูลซ้ำซ้อนและการทำให้เป็นมาตรฐาน
HMNI ได้รับการฝึกฝนเกี่ยวกับชุดข้อมูล Latin FirstName ที่ถูกแปลในระดับสากลซึ่งเป็นลำดับความสำคัญ
| แบบอย่าง | ความแม่นยำ | ความแม่นยำ | ระลึกถึง | คะแนน F1 |
|---|
| Hmni-latin | 0.9393 | 0.9255 | 0.7548 | 0.8315 |
สำหรับการแนะนำวิธีการและการวิจัยเบื้องหลัง HMNI โปรดดูโพสต์บล็อกของฉัน
ความต้องการ
Python 3.5–3.8
- เทนเซอร์โฟลว์
- Scikit-learn
- ฟัซซี่วูซซี่
- Abydos
- unidecode
คู่มือการใช้งานอย่างรวดเร็ว
การติดตั้ง
ใช้ PIP ผ่าน PYPI
เริ่มต้นวัตถุจับคู่
import hmni
matcher = hmni . Matcher ( model = 'latin' )
คู่เดียวที่คล้ายคลึงกัน
matcher . similarity ( 'Alan' , 'Al' )
# 0.6838303319889133
matcher . similarity ( 'Alan' , 'Al' , prob = False )
# 1
matcher . similarity ( 'Alan Turing' , 'Al Turing' , surname_first = False )
# 0.6838303319889133
บันทึกการเชื่อมโยง
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' )ชื่อซ้ำซ้อนและการทำให้เป็นมาตรฐาน
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']
พารามิเตอร์ตัวจับคู่
hmni.matcher ( model = 'latin', prefilter = true, allow_alt_surname = true, allow_initials = true, allow_missing_components = true)
- โมเดล (STR) - โมเดลสถิติ HMNI (ละตินโดยค่าเริ่มต้น)
- prefilter (bool) - ผู้ที่จับคู่ผู้สมัครจะไม่น่าเป็นไปได้ (จริงตามค่าเริ่มต้น)
- ALLOW_ALT_SURNAME (BOOL) - หากผู้จับคู่พิจารณานามสกุลการจับคู่ออกเสียง เช่น Smith, Schmidt (จริงโดยค่าเริ่มต้น)
- ALLED_INITIALS (BOOL) - หากผู้จับคู่พิจารณาชื่อที่มีชื่อย่อ (จริงโดยค่าเริ่มต้น)
- ALLOW_MISSING_COMPONENTES
วิธีการจับคู่
ความคล้ายคลึงกัน (name_a, name_b, prob = true, surname_first = false)
- name_a (str) - ชื่อแรกสำหรับการเปรียบเทียบ
- NAME_B (STR) - ชื่อที่สองสำหรับการเปรียบเทียบ
- PROB (BOOL) - หากกลับมาจริงกลับความน่าจะเป็นที่คาดการณ์
- Threshold (Float) - ความน่าจะเป็นในการทำนายความน่าจะเป็นเกณฑ์สำหรับการจับคู่ที่เป็นบวก (0.5 โดยค่าเริ่มต้น)
- surname_first (bool) - ถ้าสตริงชื่อเริ่มต้นด้วยนามสกุล (เท็จโดยค่าเริ่มต้น)
Fuzzymerge (df1, df2, how = 'inner', on = none, left_on = none, right_on = ไม่มี, ตัวบ่งชี้ = false, limit = 1, threshold = 0.5, ally_exact_matches = true, surname_first = false)
- DF1 (Pandas DataFrame หรือ Named Series) - วัตถุแรก/ซ้ายที่จะรวมกับ
- DF2 (Pandas Dataframe หรือ Named Series) - วัตถุที่สอง/ขวาที่จะรวมกับ
- How (str) - ประเภทของการผสานที่จะดำเนินการ
-
inner (ค่าเริ่มต้น): ใช้จุดตัดของปุ่มจากทั้งสองเฟรมคล้ายกับการเข้าร่วม SQL ภายใน; รักษาลำดับของคีย์ซ้าย -
left : ใช้เฉพาะปุ่มจากเฟรมซ้ายคล้ายกับ SQL ซ้ายด้านนอกเข้าร่วม; รักษาคำสั่งซื้อที่สำคัญ -
right : ใช้เฉพาะปุ่มจากเฟรมขวาคล้ายกับ SQL ด้านนอกขวาเข้าร่วม; รักษาคำสั่งซื้อที่สำคัญ -
outer : ใช้ Union of Keys จากทั้งสองเฟรมคล้ายกับ SQL Full Outer เข้าร่วม; เรียงลำดับคีย์พจนานุกรม
- บน (ป้ายกำกับหรือรายการ) - ชื่อระดับคอลัมน์หรือดัชนีที่จะเข้าร่วม สิ่งเหล่านี้จะต้องพบในทั้ง dataframes
- left_on (ป้ายกำกับหรือรายการ) - ชื่อคอลัมน์หรือระดับดัชนีที่จะเข้าร่วมใน dataframe ด้านซ้าย
- right_on (ป้ายกำกับหรือรายการ) - ชื่อคอลัมน์หรือระดับดัชนีที่จะเข้าร่วมใน dataframe ด้านขวา
- ตัวบ่งชี้ (บูล) - ถ้าเป็นจริงเพิ่มคอลัมน์ลงในเอาต์พุต dataframe ที่เรียกว่า“ _merge” พร้อมข้อมูลในแหล่งที่มาของแต่ละแถว (เท็จโดยค่าเริ่มต้น)
- จำกัด (int) - จำนวนสูงสุดของชื่อที่ตรงกันที่จะพิจารณา (1 โดยค่าเริ่มต้น)
- Threshold (Float) - ความน่าจะเป็นในการทำนายความน่าจะเป็นเกณฑ์สำหรับการจับคู่ที่เป็นบวก (0.5 โดยค่าเริ่มต้น)
- ALLOW_EXACT_MATCHES (BOOL) - ถ้า TRUE อนุญาตให้รวมกันในการจับคู่ชื่อที่แน่นอนมิฉะนั้นจะไม่พิจารณาการจับคู่ที่แน่นอน (จริงตามค่าเริ่มต้น)
- surname_first (bool) - ถ้าสตริงชื่อเริ่มต้นด้วยนามสกุล (เท็จโดยค่าเริ่มต้น)
dedupe (ชื่อ, threshold = 0.5, Keep = 'longest', reverse = true, limit = 3, แทนที่ = false, surname_first = false)
- ชื่อ (รายการ) - รายชื่อชื่อไปยัง dedupe
- Threshold (Float) - ความน่าจะเป็นในการทำนายความน่าจะเป็นเกณฑ์สำหรับการจับคู่ที่เป็นบวก (0.5 โดยค่าเริ่มต้น)
- KEEP (STR) - ระบุวิธีการเก็บชื่อหนึ่งในหลายชื่อทางเลือก
-
longest (ค่าเริ่มต้น): เก็บชื่อที่ยาวที่สุด -
frequent : เก็บชื่อที่พบบ่อยที่สุดในรายการชื่อ
- reverse (bool) - ถ้าจริงจะเรียงลำดับตรงกับลำดับจากมากไปมากน้อยไปมากขึ้น (จริงตามค่าเริ่มต้น)
- จำกัด (int) - จำนวนสูงสุดของชื่อที่ตรงกันที่จะพิจารณา (3 โดยค่าเริ่มต้น)
- แทนที่ (บูล) - หากรายการชื่อปกติส่งคืนจริงอื่น ๆ ส่งคืนรายการชื่อที่หักสำรอง (เท็จโดยค่าเริ่มต้น)
- surname_first (bool) - ถ้าสตริงชื่อเริ่มต้นด้วยนามสกุล (เท็จโดยค่าเริ่มต้น)
actight_similarity (name_a, name_b, คะแนน)
- name_a (str) - ชื่อแรกสำหรับการกำหนดคะแนนความคล้ายคลึงกัน
- NAME_B (STR) - ชื่อที่สองสำหรับการกำหนดคะแนนความคล้ายคลึงกัน
- คะแนน (ลอย) - ได้รับคะแนนความคล้ายคลึงกันสำหรับคู่ของชื่อ
การบริจาค
ยินดีต้อนรับคำขอดึง สำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการสร้างแบบจำลองโดยใช้ระบบการเขียนละตินหรือไม่ใช่ละติน (จีน, ซิริลลิก, อาหรับ), สมุดบันทึก Jupyter ถูกแชร์ในโฟลเดอร์ dev เพื่อสร้างโมเดลโดยใช้วิธีการที่คล้ายกัน
ใบอนุญาต
มิกซ์