Tiếp tục nơi tôi đã dừng lại trong bài viết trước sau khi khám phá một số thuật toán đối sánh mờ dựa trên chính tả, đã đến lúc chuyển trọng tâm của chúng ta sang đối sánh mờ dựa trên phát âm
Trước khi tiếp tục, chúng ta phải biết một thư viện trong python i. e. Fuzzywuzzy sử dụng nội bộ Khoảng cách Levenshtein để tính toán độ giống nhau giữa 2 chuỗi trên thang điểm từ 0–100, giá trị càng cao, các chuỗi càng giống với 100 là đối sánh chính xác
Nhưng ở vị trí số 1,
- Yêu cầu của khớp mờ dựa trên ngữ âm là gì?
- Các thuật toán đối sánh lông tơ dựa trên chính tả có một số nhược điểm không?
Hãy xem xét các trường hợp dưới đây
TRƯỜNG HỢP 1
- 'Mehul' & 'Mahul' có nên ánh xạ tới cùng một cá nhân được cấp cùng một ID [để mọi gia đình trên thế giới được cấp một ID]?
Có, vì lỗi chính tả phổ biến trong dữ liệu người dùng và có vẻ như đây là một lỗi. Quan sát những gì mờ-wuzzy trở lại
Không tệ
Nhưng chúng ta có thể làm cho nó 100 tôi. một trận đấu chính xác?
TRƯỜNG HỢP 2
- Có nên coi 'Mehul Gupta' & 'Mehul' là giống nhau nếu chúng được ánh xạ tới cùng một ID [để mỗi gia đình được cấp một ID như trên]?
Xác suất chắc chắn là 90% nếu không muốn nói là 100% rằng họ đại diện cho cùng một cá nhân vì các họ khác nhau trong cùng một gia đình là rất hiếm. Chúng ta hãy xem những gì mờ-wuzzy trả về cho trường hợp này
mới 62
Cái này chắc khoảng 90
Do đó, những cái tên không đầy đủ có thể khiến chúng ta đau đầu
TRƯỜNG HỢP 3
Ngoài ra, còn những chuỗi này 'Mehulllllllllllllllll', 'Mehul' thì sao?
Ối. chỉ 53
Vì vậy, bạn thấy đấy, tồn tại một số trường hợp mà sự trùng khớp chính tả có thể là thảm họa
Trước tiên, các chuỗi này có thể được chuyển đổi thành một mẫu chuẩn trước khi đi theo khoảng cách Levenshtein không? . Trước khi tiếp tục, cần lưu ý rằng các thuật toán bên dưới hoàn toàn dựa trên quy tắc và thảo luận về các quy tắc đó sẽ không có nhiều ý nghĩa [vì có rất nhiều quy tắc cho bất kỳ thuật toán nào đang được sử dụng] nhưng sẽ thảo luận về cơ sở của các quy tắc. Vậy hãy bắt đầu
âm thanhSoundex là một trong những thuật toán ban đầu được thiết kế để đối sánh dựa trên ngữ âm vẫn được sử dụng trong Điều tra dân số Hoa Kỳ. Về cơ bản, những gì nó làm là tạo mã gồm 4 ký tự [như G123] cho bất kỳ chuỗi nào
- Ký tự đầu tiên là ký tự đầu tiên của chuỗi. Giống như 'A' trong quả táo
- 3 ký tự còn lại là chữ số phụ thuộc vào 3 âm tiếp theo của chuỗi. Làm sao?
- Hãy kiểm tra nó cho các trường hợp trên của chúng tôi
Trường hợp 1. Lỗi chính tả nhỏ ['Mehul' & 'Mahul']
giải quyết dễ dàng
trường hợp 2. Văn bản vô nghĩa ở cuối
Ừ
Bây giờ, lông tơ. ratio[] sẽ trả về 100 khi chúng tôi tìm thấy kết quả khớp chính xác. Một vấn đề được giải quyết
Trường hợp 3. tên không đầy đủ
Như chúng ta có thể thấy, lông tơ. ratio[] được cải thiện [75] so với bản gốc [67] cho các mã hóa mới được tạo. Do đó, một lựa chọn tốt hơn để lựa chọn
Nhưng làm thế nào Soundex tạo ra các mã hóa này?
Soundex chỉ xem xét 4 âm thanh đầu tiên mà chuỗi có
- Hãy xem xét 'Gaurav Gupta' từ các ảnh chụp màn hình ở trên. Nó có 6 âm khác nhau ['gau','r','v','gu','p','ta'] nhưng Soundex sẽ xem xét 4 âm đầu tiên là. gau, r, v gu & cung cấp cho chúng tôi mã cho chuỗi
- Tương tự, ‘Gaurav’ có 3 âm là ‘gau’,’r’,’v’ nên chữ số cuối cùng là 0 [ở G610] là thiếu âm thứ 4
- Vì vậy, 3 trong số 4 âm thanh phù hợp với 2 chuỗi & do đó các mã được tạo khá giống nhau [G612 & G610] & khác nhau ở ký tự cuối cùng đại diện cho âm thanh thứ 4
Càng xa càng tốt
Nhưng có bất kỳ hạn chế nào khi chỉ xem xét 4 âm thanh đầu tiên không?
NhiềuVì 'Muralitharan' có 6 âm thanh. Mu, R, Li, Th, R, N. chỉ có 4 người đầu tiên trợ giúp trong việc hình thành mã, do đó, bất cứ điều gì xuất hiện sau 'Muralith' đều bị bỏ qua, điều này có thể khiến chúng ta rơi vào tình huống như trong trường hợp dưới đây khi cùng tên đầu tiên với họ khác nhau sẽ tạo ra cùng một mã
Do đó, xác định các cá nhân khác nhau là cùng
Ngoài ra, vì mã hóa được tạo chỉ có 4 ký tự, do đó, khả năng có 26[A-Z] X 10 [0–9] X 10 [0–9] X 10 [0–9]=26000 mẫu khác nhau có thể rất nhỏ khi
Do đó, nếu chúng ta có một nhóm gồm 100 nghìn tên, tất cả chúng sẽ được chuyển đổi thành một trong 26 nghìn mẫu và do đó, nhiều xung đột sẽ được quan sát và các tên khác nhau sẽ ánh xạ tới cùng một mẫu có thể không đại diện cho cùng một cá nhân. Vì vậy, một vài điểm trước khi kết thúc
- Soundex khá tốt với các tên/chuỗi ngắn về độ dài hoặc chỉ tên riêng là quan trọng. Giống như nếu chúng tôi có ID gia đình nhóm tất cả các thành viên trong gia đình lại với nhau, bạn không nên lo lắng về họ trong hầu hết thời gian và do đó Soundex là một vị cứu tinh rõ ràng
- Nó chỉ nên được sử dụng khi nhóm tên có thể có của một nhóm nhỏ. Giống như, việc xác định một cá nhân bằng cách sử dụng họ có thể dễ dàng nhưng việc xác định các cá nhân sử dụng thành phố hoặc tiểu bang làm ID sẽ gặp rắc rối do có quá nhiều nhóm và do đó xung đột trong mã hóa 4 ký tự được tạo
Metaphone ra đời sau Soundex rất nhiều. Nó, tương tự như Soundex, chuyển đổi bất kỳ chuỗi nào trong mã hóa tùy thuộc vào âm thanh hiện tại và xuất ra mã toàn bảng chữ cái. Ưu điểm chính mà Metaphone có trên Soundex là nó
- Xem xét toàn bộ chuỗi trong khi tạo mã cho chuỗi & không giống như Soundex chỉ xem xét một vài âm thanh đầu tiên
- Độ dài mã không bị hạn chế, do đó, ngay cả một nhóm từ lớn cũng có thể được chuẩn hóa mà không có nhiều va chạm
Mã cho chuỗi được tạo như thế nào? . Hãy quan sát hiệu suất của nó trên một vài trường hợp cạnh
Lỗi chính tả nhỏ
Chơi lô tô
Trường hợp mà Soundex đang gặp khó khăn là nó ánh xạ các tên khác nhau như ‘Gaurav Dwivedi’, ‘Gaurav Deshmukh’,’ Gaurav Dravid’ giống nhau. Metaphone cũng giải quyết vấn đề này
Metaphone tạo các bảng mã khác nhau trong đó tên đầu tiên giống nhau nhưng họ khác nhau. Nhưng có một số vấn đề với Metaphone?
Đúng,
Vì nó xem xét toàn bộ chuỗi để tạo mã,
- Gặp khó khăn với các đuôi Vô nghĩa trong một chuỗi/tên so với Soundex nhưng tốt hơn là chỉ có lông tơ. tỉ lệ[]
- Đấu tranh với những cái tên không đầy đủ so với Soundex
Metaphone cũng có hai phiên bản nâng cấp
- ĐôiMetaphone. Tạo 2 mã hóa cho một chuỗi, một chính và một phụ khác
- Metaphone3 không phải là mã nguồn mở do đó có rất ít kiến thức về điều này
Một điều nữa, cả hai thuật toán này đều là thảm họa với các ký tự không phải là bảng chữ cái. Vì thế
- Metaphone trả về mã hóa trống nếu tất cả các ký tự là số hoặc ký tự đặc biệt, ngược lại nếu chỉ một số ký tự không phải là bảng chữ cái, chúng sẽ bị bỏ qua hoàn toàn
- Soundex bỏ qua các ký tự như vậy nếu chúng không phải là ký tự đầu tiên của chuỗi, nếu không thì ký tự đầu tiên của mã hóa là ký tự đặc biệt đó
Bây giờ chúng ta đã xem qua cả Soundex & Metaphone, cái nào tốt hơn thì hơi khó nói & hoàn toàn phụ thuộc vào dữ liệu của bạn
Ví dụ: tôi đã làm việc với việc hợp nhất các tên được cung cấp ID gia đình. Do đó, hiếm khi có các họ khác nhau trong một gia đình Ấn Độ với tên chung [như Raj Gupta & Raj Mishra trong cùng một gia đình là một trường hợp hiếm gặp], Soundex có lợi thế lớn so với Metaphone. Mặc dù vậy, Metaphone có thể tốt với các tên tương tự trong một thành phố hoặc tiểu bang nơi việc xem xét tên đầy đủ là bắt buộc