Algoritmos para agregar identidades duplicadas com base em dados não numéricos?

7

Eu tenho um grande conjunto de dados (2 milhões de entradas) de pessoas, mas muitas pessoas têm várias entradas no banco de dados com informações de identificação ligeiramente (ou significativamente) diferentes. Por exemplo, eu posso ter J. Doe e John Doe, ou eu posso ter John Doe com um endereço de email de acompanhamento e John Doe sem um endereço de email de acompanhamento.

Eu estive analisando diferentes algoritmos de cluster, mas nada parece adequado ao que estou fazendo, que é agregar as entradas com base em regras como as seguintes:

  • adivinhe o nome e o sobrenome com base em se um dos nomes está escrito em todas as maiúsculas
  • agregue "J. Doe" e "J. Doe" se os endereços de email corresponderem
  • agregue "J. Doe" em "John Doe" se nenhuma outra pessoa tiver o primeiro nome começando com "J" e o sobrenome "Doe"

Com um conjunto de dados menor, isso seria uma tarefa relativamente simples, apenas com algumas regras simples, mas com o número de entradas que tenho, as tarefas de agregação podem ficar muito lentas e a lógica fica bastante complicada. Minha solução atual (baseada no uso da função de pesquisa de texto completo no meu banco de dados para encontrar entradas semelhantes, adicionando hashes com base nesses resultados e agregando com base em uma mistura de hashes e tipos de ambiguidade) funciona, mas sempre que tento executá-lo ou atualizá-lo, apenas grita que é o tipo de problema que alguém já resolveu. Mas não consegui encontrar uma solução.

Existem algoritmos que farão o que eu quero com base em regras como esta? Ou pacotes ou software específicos que podem ser úteis? Ou estou abordando esse problema completamente errado?

Obrigado!

(Observe, porém, que estou ciente de que existem muitas maneiras diferentes de agregar identidades incorretamente (por exemplo, J. Doe pode significar John Doe ou James Doe); portanto, não preciso de avisos contra a tentativa de agregar coisas.)

escada de corda
fonte
Depois de postar esta pergunta, você tentou alguma coisa ou apresentou algum plano? Qual idioma você prefere? Eu tenho algumas idéias em minha mente. O Python dictionaryserá seu melhor amigo para ter uma chave e um valor correspondente no seu caso.
DCIM
2
Isso é chamado en.wikipedia.org/wiki/Record_linkage
Emre
Agrupar será a coisa errada aqui. Pela análise estatística, você mesclará "Jan" e "Jane" porque diferem em apenas uma letra. Portanto, no máximo, eles devem ser usados ​​de forma interativa, como no OpenRefine. Procure uma pesquisa de vínculo recorde.
Saiu - Anony-Mousse

Respostas:

7

Ainda não resolvi com êxito meu problema de ligação de registros, mas queria compartilhar algumas das coisas que encontrei no processo, caso sejam úteis para outras pessoas. Este é um trabalho em andamento baseado aqui no GitHub.


Gravar recursos de ligação

(também conhecido como desduplicação, correspondência de dados, resolução da entidade)

fundo

Documentos

Palestras

Livros

Software grátis

(última atualização, estrelas do github em novembro de 2017)

Pitão

Java

R

De outros

Software e soluções comerciais

Para SAS

Limpeza de Dados

Analisadores de nome

Pitão Javascript

Papéis

Organizações

Diversos

escada de corda
fonte