2012-11-06 30 views
7

Tôi đang cố gắng thiết bị thuật toán thực hiện sửa lỗi trong tên. Cách tiếp cận của tôi là có một cơ sở dữ liệu với tên chính xác, tính toán khoảng cách chỉnh sửa giữa mỗi người trong số họ và tên đã nhập và sau đó đề xuất 5 hoặc 10 gần nhất.Sửa lỗi trong tên

Tác vụ này khác biệt đáng kể so với sửa lỗi chuẩn trong từ vì một số tên có thể được thay thế bằng tên viết tắt. Ví dụ: "Jonathan Smith" và "J. Smith" thực sự khá gần và có thể dễ dàng được coi là cùng tên, do đó khoảng cách chỉnh sửa phải thực sự nhỏ nếu không phải 0. Một thách thức khác là một số tên có thể được viết khác nhau trong khi nghe tương tự. Ví dụ: ShnaiderSchneider là các phiên bản cùng tên được viết bởi những người có miền địa phương khác nhau (có những ví dụ tốt hơn cho tôi đoán). Và trường hợp khác - chỉ cần tưởng tượng tất cả các lỗi có thể bằng văn bản Jawaharlal Nehru hầu hết trong số đó không có gì để làm với tên thật. Một lần nữa có lẽ hầu hết trong số họ sẽ tương tự nhau về mặt ngữ âm.

Rõ ràng thuật toán sửa lỗi của Lucene sẽ không giúp tôi ở đây vì nó không xử lý các trường hợp trên.

Vì vậy, câu hỏi của tôi là: bạn có biết bất kỳ thư viện nào có khả năng sửa lỗi trong tên không? Bạn có thể đề xuất một số thuật toán để xử lý các trường hợp được đề cập ở trên không?

Tôi quan tâm đến các thư viện bằng C++ hoặc java. Đối với các đề xuất thuật toán, bất kỳ ngôn ngữ hoặc mã giả nào cũng sẽ thực hiện.

+0

Tôi thấy 2 cách tiếp cận có thể có tại đây: 1. Có từ điển các từ đồng nghĩa và bao gồm nó khi tính toán khoảng cách. 2. Sử dụng một số mô-đun AI với logic mà bạn mô tả. – SomeWittyUsername

+0

Tôi tin rằng chỉ có tùy chọn 2 là có thể cho tôi khi tôi có hàng triệu tên, miền địa phương khác nhau, từ đồng nghĩa khác nhau. Vấn đề ở đây là ** cách thực hiện logic tôi mô tả cụ thể phần tương tự ngữ âm. Ngoài ra tôi muốn chắc chắn rằng không có gì tương tự là không có ở đó. –

+0

Hãy rất cẩn thận khi thực hiện việc này. Tôi vừa hoàn thành một cuộc tranh luận nhiều tuần với UCSD, nơi tôi đã là sinh viên trong một vài năm kết thúc vào năm 2009. Họ đang tính tiền tôi cho một tấm séc trả lại. Nó chỉ được giải quyết khi tôi cuối cùng đã cho họ đào hình ảnh của tờ séc, thay vì chỉ nhìn vào hồ sơ của họ. Kiểm tra thực sự được viết bởi một người có cùng họ và tên, nhưng với chữ viết tắt ở giữa. Bộ phận kế toán đã giả định nó thuộc về tài khoản của tôi dựa trên tên gần khớp. Ngay cả các kết hợp tên chính xác cũng không được sử dụng nhiều để xác định liệu dữ liệu có về cùng một người hay không. –

Trả lời

6

Đối với đối sánh ngữ âm, hãy xem Soundex.

Tôi nghĩ rằng việc sửa đổi thuật toán khoảng cách Levenshtein để xử lý "viết tắt thành chữ cái đầu" và "mở rộng từ ban đầu" thành chỉnh sửa một khoảng cách đơn giản, nhưng chi tiết vượt ra ngoài tôi vào lúc này.

+0

Soundex chắc chắn là thứ tôi có thể sử dụng. Cảm ơn vì điều đó :) –

Các vấn đề liên quan