Domanda

Dato un database molto ampio di nomi di prodotti, come potresti rilevare possibili errori di battitura nelle ricerche degli utenti e suggerire possibili correzioni (un po' come il modo in cui Google li presenta)?

Per esempio.

L'utente inserisce "maniglie forche" e preme "cerca".

Tornano

"Nessun risultato.Intendevi "maniglie della forchetta"?"

È stato utile?

Soluzione

Esistono diversi approcci per questo problema:

  1. Mantenere un tavolo di errori di ortografia più diffusi nel tuo database.Se hai bisogno di alcuni errori di ortografia comuni: Qui)
  2. Utilizzando un algoritmo basato su modificare la distanza:Nella teoria dell'informazione e nell'informatica, la distanza di modifica tra due stringhe di caratteri è il numero di operazioni necessarie per trasformare l'una nell'altra.Esistono diversi algoritmi per definire o calcolare questa metrica.Leggi il Articolo di Wikipedia per l'algoritmo di Levenshtein Per esempio.
  3. Se utilizzi Lucene per la ricerca a testo completo, ecco un bell'articolo che mostra come implementare la funzione "Intendevi dire?".
  4. Se vedi questa funzionalità come una semplice correzione ortografica, ecco alcune implementazioni molto brevi e carine in diverse lingue: Come scrivere un correttore ortografico

Altri suggerimenti

Potresti usare un algoritmo fonetico , come Soundex per trovare corrispondenze che suonano simili.

PostgreSQL ha un modulo chiamato fuzzystrmatch , con i documenti che mostrano esempi di utilizzo di Soundex, Levenshtein, Metaphone e Double Metaphone.

Sono sicuro di aver letto che Google mantiene un elenco di ciò che un utente digita nuovamente quando non ottiene risultati. È possibile mantenere una mappatura di questi valori (ad esempio se la stringa riscritta inizia con la stessa lettera).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top