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.)
dictionary
será seu melhor amigo para ter uma chave e um valor correspondente no seu caso.