Thuật toán tổng hợp các danh tính trùng lặp dựa trên dữ liệu không phải là số?


7

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ứ.)


Sau khi đăng câu hỏi này, bạn đã thử bất cứ điều gì hoặc đưa ra một kế hoạch trong bất kỳ loại nào? Bạn thích ngôn ngữ nào Tôi có một số ý tưởng trong tâm trí của tôi. Python dictionarysẽ 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.
innm

2
Điều này được gọi là en.wikipedia.org/wiki/Record_linkage
Emre

Phân cụm sẽ là điều sai ở đây. Bằng cách phân tích thống kê, bạn sẽ hợp nhất "Jan" và "Jane" vì chúng chỉ khác nhau bởi một chữ cái. Vì vậy, nhiều nhất, chúng nên được sử dụng tương tác, ví dụ như trong OpenRefine. Hãy tìm nghiên cứu liên kết kỷ lục thay thế.
Có QUIT - Anony-Mousse

Câu trả lời:


7

Tôi chưa giải quyết thành công vấn đề liên kết hồ sơ của mình, nhưng tôi muốn chia sẻ một số nội dung tôi đã tìm thấy trong quy trình trong trường hợp sử dụng cho bất kỳ ai khác. Đây là một công việc đang tiến dựa đây trên GitHub.


Tài nguyên liên kết hồ sơ

(còn được gọi là trùng lặp, khớp dữ liệu, phân giải thực thể)

Lý lịch

Các tài liệu

Nói chuyện

Sách

Phần mềm miễn phí

(cập nhật lần cuối, sao github tính đến tháng 11 năm 2017)

Con trăn

Java

R

Khác

Phần mềm và giải pháp thương mại

Dành cho SAS

Làm sạch dữ liệu

Tên trình phân tích cú pháp

Con trăn JavaScript

Giấy tờ

Tổ chức

Linh tinh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.