Vou criar um dicionário onde os usuários possam encontrar cada palavra que esteja próxima uma da outra a partir da pronúncia e da letra da palavra.
Por exemplo, quando o usuário pesquisouaproximarmeu site retorna outras palavras próximas disso, comoperto, pêra, querido, traseiro, aqui
Como fazer isso?
como este site:zona de rima
Responder1
Acho que isso é toleravelmente complexo. É um ramo da Programação em Linguagem Natural (não a outra PNL, Neuro Linguistic Pap). Você precisa ser capaz de combinar "aqui" e "ouvir" - então você precisa quebrar os elementos e mapeá-los para uma equivalência fonética (h-"ere" e h-"ere" para ambos). E algumas grafias têm fonética variante (tosse, arado, através) ou têm homônimos ainda piores (o aí, eles estão, o grupo deles) e podem ser regionalmente diferentes (no Reino Unido, o 'a' longo ou curto em garagem, gráfico e vidro, por exemplo). Quando você faz equivalências fonéticas, elas nem sempre são singulares.
Depois de obter equivalências fonéticas, você pode usar uma variedade de heurísticas para minimizar a diferença entre elas. Para poesia, você provavelmente precisará enfatizar excessivamente o peso das terminações - a rima depende principalmente das terminações das palavras. Você também pode querer execuções aliterativas para poesia - provavelmente seria necessária uma ponderação diferente para aliterações eufônicas.
Eu participaria de um dos cursos universitários on-line gratuitos sobre PNL - atualmente existem vários. Base muito melhor em técnicas modernas de análise de linguagem. :)
Responder2
Você pode usar a comparação de strings entre strings do mesmo comprimento e permitir um (ou dois) caracteres não correspondentes.
Porém, olhando para o seu site, sugiro mapear as palavras por sua representação fonética e depois pesquisá-las, tratando as strings como matrizes de caracteres e iniciando a comparação pela parte de trás.
Para desenvolver seu exemplo: perto -> \'nir\ pear -> \'per\ dear -> \'dir\ rear -> \'rir\ ou \'rer\ aqui -> \'hir\
(Estou roubando o Merriam-Webster online para a notação fonética, aqui)
Receio que o mapeamento deva ser feito como uma tabela de consulta e não pode ser compilado, porque o inglês não tem regras de pronúncia muito rígidas...
De qualquer forma, depois de mapear suas palavras, você pode comparar o último fonema delas: neste caso, você pode querer procurar palavras que terminem em "ir\" (o que excluiria "pear", neste caso).
Este método não parece muito eficiente: se eu pudesse usar algum espaço em disco, salvaria as pesquisas para referência futura: então, quando um segundo uso procurar por todas as palavras que rimam com "near", o aplicativo apenas carregará o salvo search - já que os dicionários geralmente não evoluem muito rápido.