Come rilevare un errore di battitura nella ricerca di un prodotto e suggerire possibili correzioni?
-
20-08-2019 - |
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"?"
Soluzione
Esistono diversi approcci per questo problema:
- Mantenere un tavolo di errori di ortografia più diffusi nel tuo database.Se hai bisogno di alcuni errori di ortografia comuni: Qui)
- 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.
- Se utilizzi Lucene per la ricerca a testo completo, ecco un bell'articolo che mostra come implementare la funzione "Intendevi dire?".
- 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).