Sử dụng các thuật toán như leveinstein (leveinstein hoặc difflib), rất dễ dàng để tìm các kết quả phù hợp.eg.Kiểm tra chuỗi con/chuỗi con gần đúng tồn tại trong một chuỗi dài hơn, bằng Python?
>>> import difflib
>>> difflib.SequenceMatcher(None,"amazing","amaging").ratio()
0.8571428571428571
Có thể phát hiện các kết quả mờ bằng cách quyết định ngưỡng khi cần.
Yêu cầu hiện tại: Để tìm chuỗi con mờ dựa trên ngưỡng trong chuỗi lớn hơn.
ví dụ:
large_string = "thelargemanhatanproject is a great project in themanhattincity"
query_string = "manhattan"
#result = "manhatan","manhattin" and their indexes in large_string
Một giải pháp brute force là để tạo ra tất cả các chuỗi con có chiều dài N-1 đến N + 1 (hoặc chiều dài phù hợp khác), trong đó N là chiều dài của QUERY_STRING, và sử dụng Levenstein trên từng cái một và xem ngưỡng.
Có giải pháp tốt hơn có sẵn trong python hay không, tốt nhất là mô-đun đi kèm trong python 2.7 hoặc mô-đun có sẵn bên ngoài.
CẬP NHẬT: Mô-đun regex Python hoạt động khá tốt, mặc dù nó chậm hơn một chút so với mô đun re
sẵn có cho các hoạt động phụ. Đầu ra mong muốn là tốt và việc kiểm soát độ lớn của độ mờ có thể dễ dàng được xác định.
>>> import regex
>>> input = "Monalisa was painted by Leonrdo da Vinchi"
>>> regex.search(r'\b(leonardo){e<3}\s+(da)\s+(vinci){e<2}\b',input,flags=regex.IGNORECASE)
<regex.Match object; span=(23, 41), match=' Leonrdo da Vinchi', fuzzy_counts=(0, 2, 1)>
Lệnh 'regex' nên lution không hoạt động cho ví dụ đã cho. Bạn đang gặp vấn đề gì với nó? – Veedrac