Tôi có một bộ dữ liệu lớn (2M mục) của mọi người, nhưng nhiều người có nhiều mục trong cơ sở dữ liệu với thông tin nhận dạng khác nhau (hoặc đáng kể). Ví dụ: tôi có thể có J. Doe và John Doe hoặc tôi có thể có John Doe với một địa chỉ email đi kèm và John Doe mà không có địa chỉ email đi kèm.
Tôi đã xem xét các thuật toán phân cụm khác nhau nhưng dường như không có gì phù hợp với những gì tôi đang làm, đó là tổng hợp các mục dựa trên các quy tắc như sau:
- đoán tên và họ dựa trên việc một trong những tên được viết trong tất cả các chữ viết hoa
- tổng hợp "J. Doe" và "J. Doe" nếu địa chỉ email khớp
- tổng hợp "J. Doe" thành "John Doe" nếu không có người khác có tên bắt đầu bằng "J" và họ "Doe"
Với một tập dữ liệu nhỏ hơn, đây sẽ là một nhiệm vụ tương đối đơn giản chỉ cần thực hiện với một số quy tắc đơn giản, nhưng với số lượng mục tôi có, các tác vụ tổng hợp có thể trở nên rất chậm và logic trở nên phức tạp. Giải pháp hiện tại của tôi (dựa trên việc sử dụng chức năng tìm kiếm toàn văn bản trong cơ sở dữ liệu của tôi để tìm các mục tương tự, thêm băm dựa trên các kết quả đó và sau đó tổng hợp dựa trên hỗn hợp băm và các loại mơ hồ), nhưng mỗi khi tôi cố gắng chạy nó hoặc cập nhật nó chỉ hét lên rằng đó là loại vấn đề mà người khác đã giải quyết. Nhưng tôi không thể tìm ra giải pháp.
Có thuật toán nào sẽ làm những gì tôi muốn dựa trên các quy tắc như thế này không? Hoặc các gói hoặc phần mềm cụ thể có thể hữu ích? Hay tôi đang tiếp cận vấn đề này hoàn toàn sai?
Cảm ơn!
(Xin lưu ý rằng tôi nhận thức rõ rằng có nhiều cách khác nhau để tổng hợp danh tính không chính xác (ví dụ: J. Doe có thể có nghĩa là John Doe hoặc James Doe), vì vậy tôi không cần cảnh báo chống lại việc cố gắng tổng hợp mọi thứ.)
dictionary
sẽ là người bạn tốt nhất của bạn để có một khóa, giá trị khớp trong trường hợp của bạn.