Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ไลบรารี FuzzyWuzzy ใน Python: เปรียบเทียบความคล้ายคลึงของสตริง

ในบทช่วยสอนนี้ เราจะเรียนรู้ 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')}")                        # 0

fuzz.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')}")                       # 0

WRatio ให้คะแนนสูงกว่าเมื่อสตริงคล้ายกันแต่ต่าง case หรือมี punctuation เพิ่ม

เมธอดอื่นๆ ที่น่าสนใจ

  • partial_ratio() - เปรียบเทียบ substring (ดีสำหรับค้นหา)
  • token_sort_ratio() - เรียง token ก่อนเปรียบเทียบ (ดีสำหรับลำดับคำสลับกัน)
  • token_set_ratio() - ใช้ set ของ tokens (ทนต่อคำซ้ำ)

สรุป

FuzzyWuzzy เหมาะสำหรับ fuzzy string matching, deduplication, record linkage ใช้ WRatio สำหรับการเปรียบเทียบทั่วไป จะได้ผลแม่นยำกว่า ratio() หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น