Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como resolver o dilema de armazenar nomes humanos no MySQL e manter a discriminabilidade e a busca por nomes semelhantes?


O que é útil é se você puder decompor o nome completo em componentes "palavras de nome" e armazenar uma codificação fonética (metafone ou uma das muitas outras opções) para cada um deles. Você só precisa da noção de palavras de nome, porém, não categorizando especificamente como primeiro, meio ou último, o que é bom porque essas categorias não funcionam bem entre culturas de qualquer maneira). Mas você pode usar as informações de ordem posicional posteriormente na classificação, se quiser, para que a pesquisa por "Paul Carl" corresponda melhor a "Paul Karl" do que a "Carl Paul". Você precisa estar ciente da pontuação ambígua que pode exigir o armazenamento de várias versões de algumas palavras de nome. Por exemplo, Bre-Anna Heim seria dividido nas palavras de nome "bre" "anna" "breanna" e "heim". Às vezes, o traço é irrelevante como Bre-Anna, mas às vezes não como em Sally-June". Bre-Anna nunca usa apenas Bre ou Anna, mas Sally-June pode usar apenas Sally ou apenas June às vezes. É difícil saber qual, então cobrir ambas as possibilidades.

Você pode escrever sua consulta decompondo e codificando foneticamente o nome completo que está procurando de maneira semelhante. Sua consulta pode retornar, digamos, aqueles nomes completos que têm duas ou mais correspondências fonéticas de nome de componente (ou uma se houver apenas um nome na pesquisa ou na origem). Isso fornece um subconjunto de nomes completos a serem considerados. Você poderia criar uma classificação simples deles, ou até mesmo fazer algo como um algoritmo de correspondência de distância neste subconjunto, o que seria muito caro computacionalmente para fazer contra todo o milhão de nomes. Quando digo correspondência de distância, estou falando de algoritmos on-line como distância de Levenshtein e similares.

(editar) O raciocínio para isso é lidar com casos como o seguinte nome:Maria de los Angeles Gomez-Rodriguez. Uma pessoa de entrada de dados pode simplesmente inserir Maria Gomez. Outro pode entrar em Maria Gomez Rodriguez. Ainda outro pode entrar em Maria Angeles Rodrigus.