ในบทช่วยสอนนี้ เราจะเรียนรู้ FuzzyWuzzy ไลบรารี Python สำหรับเปรียบเทียบความคล้ายคลึงของสตริง แตกต่างจาก regex หรือ difflib ที่คืนค่า True/False FuzzyWuzzy คืนค่า **คะแนน 0-100** แสดงระดับความคล้ายคลึง
ติดตั้ง
pip install fuzzywuzzy pip install python-Levenshtein # Linux # หรือ easy_install python-Levenshtein # Windows
โมดูล fuzz
ใช้เปรียบเทียบสตริงคู่ละคู่ มีหลายเมธอด คืนคะแนน 0-100
fuzz.ratio()
เปรียบเทียบแบบตรงไปตรงมา
from fuzzywuzzy import fuzz
print(f"Equal Strings: {fuzz.ratio('tutorialspoint', 'tutorialspoint')}") # 100
print(f"Slight Changed: {fuzz.ratio('tutorialspoint', 'TutorialsPoint')}") # 86
print(f"Slight Changed: {fuzz.ratio('tutorialspoint', 'Tutorials Point')}") # 86
print(f"Different Strings: {fuzz.ratio('abcd', 'efgh')}") # 0fuzz.WRatio() (Weighted Ratio)
จัดการ uppercase/lowercase และตัวอักษรพิเศษได้ดีกว่า
print(f"Max Score: {fuzz.WRatio('tutorialspoint', 'tutorialspoint!!!')}") # 100
print(f"Slight Changed: {fuzz.WRatio('tutorialspoint', 'TutorialsPoint')}") # 100
print(f"Different Strings: {fuzz.WRatio('abcd', 'efgh')}") # 0WRatio ให้คะแนนสูงกว่าเมื่อสตริงคล้ายกันแต่ต่าง case หรือมี punctuation เพิ่ม
เมธอดอื่นๆ ที่น่าสนใจ
- partial_ratio() - เปรียบเทียบ substring (ดีสำหรับค้นหา)
- token_sort_ratio() - เรียง token ก่อนเปรียบเทียบ (ดีสำหรับลำดับคำสลับกัน)
- token_set_ratio() - ใช้ set ของ tokens (ทนต่อคำซ้ำ)
สรุป
FuzzyWuzzy เหมาะสำหรับ fuzzy string matching, deduplication, record linkage ใช้ WRatio สำหรับการเปรียบเทียบทั่วไป จะได้ผลแม่นยำกว่า ratio() หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น