Para muitas técnicas de desduplicação, a padronização de dados é, como apontou Joel Brown, muito importante. Mas você pode conseguir passar sem ela se usar minhash.
Você ainda deseja normalizar os dados o máximo que puder: por exemplo, normalização de maiúsculas e minúsculas, ignorando pontuação em endereços, etc. Você pode até normalizar sinônimos se você tiver grupos de sinônimos conhecidos; então "Mount Saint Helens Street" se torna "mt st helens st" (introduzir uma ambigüidade como essa normalmente não prejudica a precisão de seus resultados, mas melhora a recordação).
Os nomes e endereços ainda são diferentes, com erros de ortografia, possíveis alterações nas encomendas e, talvez, inclusão de itens extras. nomes do meio ou nomes de regiões diferentes. Isso não precisa ser um problema.
O Minhash gera vários hashes por registro, com base nos recursos. Em muitas implementações, as pessoas simplesmente lançam todos os recursos em um único gerador da minhash, e obtêm, digamos, 50 hashes como resultado; mas no seu caso você pode querer dividir isso. Pegue todos os campos de nome, gere, digamos, telhas de 7 caracteres para cada uma delas, e jogue as telhas em um gerador de minsh que cospe, digamos, 5 hashes. Pegue todos os campos de endereço postal / físico e faça o mesmo usando outro gerador da minhash, que cospe, digamos, 15 hashes. Derive, digamos, 3 hashes do endereço de e-mail por conta própria. E assim por diante.
O número de hashes que você mantém para cada tipo de informação pode ser ajustado dependendo de quão importante é essa informação para determinar uma duplicata e da probabilidade de o campo não ter sido preenchido. Os dados mais confiáveis devem ter o máximo hashes atribuídos a ele.
Encontrar duplicatas próximas é bastante simples. É um pouco mais lento que o simhash e pode ocupar um pouco de memória, porque tem que filtrar um grande número de resultados, contando hashes compartilhados para cada um. Na pior das hipóteses, alguns poucos meushes podem ser selecionados de partes muito genéricas do registro, como "@gmail". no endereço de e-mail e pode estar presente em centenas de milhares ou mesmo milhões de outros registros. Mas a beleza da minhash é que ela permite que você encontre resultados que não são apenas 4 ou 5% diferentes, mas 20%, 40% ou o quanto você gosta, realmente.
(Você pode, de certa forma, derrotar esses meushes "genéricos" usando a mesma técnica que a substituição de sinônimos e substituir cadeias genéricas muito comuns, como "@ gmail.com", por marcadores menores, como "@G!". do que a sua telha de 7 caracteres, por isso nunca formará uma telha por conta própria.)
Existem algumas variantes na minhash que melhoram os resultados, exigindo menos hashes para representar os mesmos dados (consulte link ), mas se o tamanho de cada registro for pequeno, isso pode não trazer benefícios significativos. Você pode já ter 30 ou 40 hashes por registro (e hashes de 32 bits podem ser suficientes). Se você ainda não atenuou o problema "meushes genéricos", o hash sensível à localização (LSH) pode ajudar bastante; embora isso reduza a precisão das estimativas de similaridade.