Hầu hết commonly misspelled English words là trong vòng hai hoặc ba lỗi chính tả (một sự kết hợp của thay s, chèn i, hoặc xóa thư d) từ hình thức đúng của họ. I E. lỗi trong cặp từ absence - absense
có thể được tóm tắt là có 1 s, 0 i và 0 d.Làm cách nào để từ kết hợp mờ thành một từ đầy đủ (và chỉ có một từ đầy đủ) trong một câu?
Một người có thể kết hợp mờ để tìm từ và lỗi chính tả của họ bằng cách sử dụng để thay thế lạiregex python module.
Bảng dưới đây tóm tắt những nỗ lực thực hiện để phân khúc mờ một lời quan tâm từ một số câu:
- Regex1 tìm
word
phù hợp nhất trongsentence
cho phép tối đa là 2 lỗi - Regex2 tìm thấy kết quả phù hợp nhất
word
trongsentence
cho phép tại hầu hết 2 lỗi khi cố gắng hoạt động chỉ trên (tôi nghĩ) toàn bộ từ - Regex3 tìm thấy kết quả tốt nhất
word
trongsentence
cho phép tại hầu hết 2 lỗi khi chỉ hoạt động trên (tôi nghĩ) toàn bộ từ. Tôi sai rồi. - Regex4 tìm
word
phù hợp nhất trongsentence
phép tại nhất 2 lỗi trong khi (tôi nghĩ) tìm kiếm kết thúc trận đấu là một ranh giới từ
Làm thế nào tôi sẽ viết một biểu thức regex mà loại bỏ, nếu có thể, các kết quả mờ ảo sai và dương tính giả trên các cặp từ-câu này?
Một giải pháp có thể là chỉ so sánh các từ (chuỗi ký tự được bao quanh bởi khoảng trắng hoặc đầu/cuối của một dòng) trong câu với từ lãi (từ chính). Nếu có một kết quả mờ (e < = 2) giữa từ chính và một từ trong câu, sau đó trả lại từ đầy đủ (và chỉ từ đó) từ câu.
Mã
Sao chép dataframe sau vào clipboard của bạn:
word sentence
0 cub cadet cub cadet 42
1 plastex vinyl panels
2 spt heat and air conditioner
3 closetmaid closetmaid
4 ryobi batteries kyobi
5 ryobi 10' table saw ryobi
6 trafficmaster traffic mast5er
Bây giờ sử dụng
import pandas as pd, regex
df=pd.read_clipboard(sep='\s\s+')
test=df
test['(?b)(?:WORD){e<=2}']=df.apply(lambda x: regex.findall(r'(?b)(?:'+x['word']+'){e<=2}', x['sentence']),axis=1)
test['(?b)(?:\wWORD\W){e<=2}']=df.apply(lambda x: regex.findall(r'(?b)(?:\w'+x['word']+'\W){e<=2}', x['sentence']),axis=1)
test['(?V1)(?b)(?:\w&&WORD){e<=2}']=df.apply(lambda x: regex.findall(r'(?V1)(?b)(?:\w&&'+x['word']+'){e<=2}', x['sentence']),axis=1)
test['(?V1)(?b)(?:WORD&&\W){e<=2}']=df.apply(lambda x: regex.findall(r'(?V1)(?b)(?:'+x['word']+'&&\W){e<=2}', x['sentence']),axis=1)
Để tải bảng vào môi trường của bạn.
Đây là những công cụ sửa đổi nội tuyến '(? V1)', '(? B)' và chúng có ý nghĩa gì? – sln
Làm thế nào để bạn so sánh một từ _fuzzy_ với một từ thực? Bạn đang sử dụng một từ điển của một số loại? Cách đơn giản nhất là chia nhỏ khoảng trắng và sử dụng cây đại dương tùy chỉnh mà bạn viết tất cả các từ trong từ điển. Khi bạn đi qua cây, bạn có thể cho phép các chữ cái _N_ không đúng vị trí. Bạn sẽ cần mã phân nhánh đặc biệt. – sln
@sln: anh ấy đang nói về mô-đun này: https://pypi.python.org/pypi/regex –