2009-12-08 10 views
16

Vorrei offrire agli utenti la possibilità di effettuare ricerche in un ampio elenco di attività commerciali, ma di trovare ancora le partite vicine.Idee per la creazione di una funzionalità "Volevi dire XYZ" nel sito web

Qualcuno ha qualche suggerimento su come andare al meglio su questo quando non si prendono di mira parole semplici del dizionario, ma invece nomi complessi come ABC Nome commerciale?

Saluti.

+0

+1 per vedere altre buone risposte. –

+0

Sono d'accordo. Ammiro la profondità della conoscenza dei miei colleghi ingegneri del software e tutte queste risposte sono buoni indizi. –

risposta

7

Controlla l'articolo di Wikipedia su Levenshtein distance. È un concetto abbastanza semplice da comprendere e molto semplice implementare un algoritmo in qualsiasi lingua si usi, nel tuo caso, C#.

Ho trovato un esempio in C# per voi here.

Inoltre, here è un esempio di correttore ortografico di Peter Norvig di Google. È stato detto sul podcast SO alcuni episodi fa che Jon Skeet ha tentato una riscrittura di questo stesso algoritmo in C#. Non sono sicuro se lo ha completato e/o reso pubblicamente disponibile però.

+0

Grandi cose. Ho intenzione di adattare questo per operare SQL server-side come sproc per ottenere le migliori prestazioni possibili e utilizzare solo quando non ci sono partite. Grazie per l'intuizione. –

+0

come un aggiornamento, questo è stato implementato in C# qui http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig-Spelling-Corrector.html –

2

Considerare l'utilizzo della corrispondenza delle parole chiave e modificare la somiglianza basata sulla distanza. Potrebbe combinarsi con 'cercato originale' in 'effettivamente cliccato'.

1

Questa è probabilmente una soluzione pazzesca, ma potresti dividere il nome dell'attività per spazio e quindi cercare tutti gli elementi o forse la prima coppia.

Quindi è possibile cercare su "ABC" e "Affari", ma lasciare "Nome" perché potrebbe richiedere troppo tempo.

Si potrebbe anche verificare se la stringa è di una certa lunghezza, quindi tagliare e basta cercare sul primo dire 5 lettere.

Hai dato un'occhiata a "soundex" come un modo di cercare attraverso le vostre imprese. Ancora una volta, penso che avresti bisogno di dividere il nome per spazio.

1

È possibile controllare le funzioni di SQL Server SOUNDEX e DIFFERENCE. SOUNDEX converte una sequenza di caratteri (come una parola) in un codice di 4 caratteri che sarà lo stesso per parole dal suono simile. DIFFERENZA dà un numero che rappresenta il modo "diverso" due stringhe sono basate sul suono.

Si potrebbe, ad esempio, creare una colonna calcolata in base alla funzione SOUNDEX e partita su quella colonna in seguito. O potresti usare DIFFERENCE in una clausola WHERE.

+1

È anche possibile fare una ricerca su Google per MetaPhone, che è fondamentalmente una versione più complessa di Soundex. Soundex è stato effettivamente creato nel 1918 ed è un algoritmo molto semplice/di base. Metaphone generalmente darà le partite migliori, ma non è integrato in SQL, anche se ci sono numerose versioni T-SQL di in giro – Sparky

Problemi correlati