Pergunta

Dado um grande banco de dados de nomes de produtos, como você detectar possíveis erros de digitação em buscas do usuário e sugerir possíveis correções (Kinda como a forma como o Google apresenta-los)?

por exemplo.

O usuário digita "Handels garfo" e 'Pesquisa' prensas.

Eles voltar

"Nenhum resultado. Você quis dizer 'alças garfo'?"

Foi útil?

Solução

Existem várias abordagens para este problema:

  1. Manter uma tabela de erros de ortografia mais populares em seu banco de dados. Se você precisa de alguns erros comuns: aqui )
  2. Usando um algoritmo baseado no editar distância : Em informações teoria e ciência da computação, a distância de edição entre duas cadeias de caracteres é o número de operações necessárias para transformar um deles para o outro. Existem vários algoritmos diferentes para definir ou calcular essa métrica. Leia o href="http://en.wikipedia.org/wiki/Levenshtein_distance" rel="noreferrer"> artigo por exemplo.
  3. Se você estiver usando Lucene para pesquisa de texto completo, aqui é um artigo agradável que mostra como implementar o "você quis dizer" recurso.
  4. Se você ver essa característica como de correção ortográfica simples, aqui estão alguns agradável, implementações muito curtos em várias línguas: Como escrever um Spelling Corrector

Outras dicas

Você pode usar um fonética algoritmo , como Soundex para encontrar correspondências que soam similar.

PostgreSQL tem um módulo chamado fuzzystrmatch , com os documentos mostrando exemplos do uso de Soundex, Levenshtein, Metaphone, e Double Metaphone.

Eu estou certo que eu li que o Google mantém uma lista do que um usuário retypes quando eles não obter nenhum resultado. Você poderia manter um mapeamento desses valores (dizer se a cadeia retyped começa com a mesma letra).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top