Tôi có thể nói difflib.get_close_matches() để bỏ qua trường hợp như thế nào? Tôi có một từ điển có định dạng được xác định bao gồm viết hoa. Tuy nhiên, chuỗi thử nghiệm có thể có cách viết hoa đầy đủ hoặc không viết hoa và các chuỗi này phải tương đương nhau. Tuy nhiên, kết quả cần phải được viết hoa đúng cách, vì vậy tôi không thể sử dụng từ điển đã sửa đổi.Bỏ qua trường hợp với difflib.get_close_matches()
import difflib
names = ['Acacia koa A.Gray var. latifolia (Benth.) H.St.John',
'Acacia koa A.Gray var. waianaeensis H.St.John',
'Acacia koaia Hillebr.',
'Acacia kochii W.Fitzg. ex Ewart & Jean White',
'Acacia kochii W.Fitzg.']
s = 'Acacia kochi W.Fitzg.'
# base case: proper capitalisation
print(difflib.get_close_matches(s,names,1,0.9))
# this should be equivalent from the perspective of my program
print(difflib.get_close_matches(s.upper(),names,1,0.9))
# this won't work because of the dictionary formatting
print(difflib.get_close_matches(s.upper().capitalize(),names,1,0.9))
Output:
['Acacia kochii W.Fitzg.']
[]
[]
đang làm việc:
Dựa trên câu trả lời Hugh Bothwell, tôi đã sửa đổi các mã như sau để có được một giải pháp làm việc (mà cũng nên làm việc khi hơn hơn một kết quả được trả lại):
import difflib
names = ['Acacia koa A.Gray var. latifolia (Benth.) H.St.John',
'Acacia koa A.Gray var. waianaeensis H.St.John',
'Acacia koaia Hillebr.',
'Acacia kochii W.Fitzg. ex Ewart & Jean White',
'Acacia kochii W.Fitzg.']
test = {n.lower():n for n in names}
s1 = 'Acacia kochi W.Fitzg.' # base case
s2 = 'ACACIA KOCHI W.FITZG.' # test case
results = [test[r] for r in difflib.get_close_matches(s1.lower(),test,1,0.9)]
results += [test[r] for r in difflib.get_close_matches(s2.lower(),test,1,0.9)]
print results
Đầu ra:
['Acacia kochii W.Fitzg.', 'Acacia kochii W.Fitzg.']
Xin lỗi để khởi động lại một bài đăng cũ, nhưng tôi thấy điều này thú vị. Đối với sản phẩm tìm kiếm cuối cùng, tôi đang đọc mã và có vẻ như bạn sẽ không cần danh sách kết quả đầu tiên và s1. Đúng không? Có vẻ như thuật toán sẽ tạo ra kết quả bạn muốn mà không có những dòng đó. –
@TylerRussell đúng. Mục đích là để xác minh rằng viết hoa của cụm từ tìm kiếm không ảnh hưởng đến kết quả. Thực tế là tìm kiếm với s1 và tìm kiếm với s2 tạo ra kết quả tương tự cho thấy rằng thuật toán đã làm việc. Nói chung, bạn sẽ chỉ sử dụng một cụm từ tìm kiếm. – rudivonstaden