2014-07-25 7 views
6

Ho una pagina Web su un'applicazione ASP.NET MVC in cui i clienti cercano i fornitori. I fornitori acquisiscono i propri dettagli sul sito web. Il cliente desidera una funzione di "ricerca intelligente", in cui è possibile cercare i fornitori e trovarli anche se l'ortografia del fornitore è "leggermente diversa" rispetto a ciò che viene digitato nella casella di ricerca.Implementazione ricerca intelligente/confronto stringa fuzzy

Non ho idea di quale sia la nozione di "leggermente diversa" del cliente. Ho cercato di implementare un algoritmo soundex personalizzato. Questo converte una parola in un numero basato su come suona. Questo numero viene quindi utilizzato per il confronto.

Ad esempio:

Zach

Zack

codificherà allo stesso valore. Ci sono altre opzioni che potrei esaminare?

+0

questo collegamento può aiutarti -a [collegamento] (http://stackoverflow.com/questions/2933464/how-to-build-a-search-engine-in-c-sharp) – Prasanna

risposta

6

È possibile utilizzare Levenshtein distance combinato con il campo di un 'tag' sui fornitori nel tuo database per funzionalità di stile 'ricerca intelligente'.

È piuttosto semplice ma funziona bene per casi come "Zack/Zach".

L'aggiunta di tag nel database consente di gestire le situazioni in cui le persone possono cercare un fornitore tramite l'acronimo o un altro nome colloquiale.

Vedere How to calculate distance similarity measure of given 2 strings? e http://www.dotnetperls.com/levenshtein per dettagli di implementazione.

+0

Il tuo suggerimento mi ha aiutato a trovare questa [libreria] (https://fuzzystring.codeplex.com/) su codeplex che implementa la distanza di Levenshtein (e molti altri algoritmi) e sembra davvero facile da usare.Ho intenzione di fare un tentativo :) – Carel

+0

Contento di poterti indirizzare nella giusta direzione. Bella scoperta sulla libreria FuzzyString. – Dhaust

7

Quello che ti serve è una ricerca indicizzata con un filtro di analisi fonetica.

Lucene.NET offre proprio questo.

http://lucene.apache.org/core/4_0_0/analyzers-phonetic/org/apache/lucene/analysis/phonetic/PhoneticFilterFactory.html

How to perform Phonetic and Aproximative search in Lucene.net

Vedi qui per la versione .NET di Phonetix:

Qui qualche informazione in più su come implementarlo in C#:
lucene.net phonetic filter

È inoltre possibile utilizzare un BeiderMorseEncoder, che i s progettato per gestire many languages.

Per quanto riguarda l'individuazione di parole simili pronunciate, perché non utilizzare invece una ricerca fuzzy?
how to do fuzzy search in Lucene.net in asp.net?
Lucene.net Fuzzy Phrase Search

ci sono anche un sacco di metriche stringa funzioni che è possibile utilizzare tramite CLR-stored-procedure: http://anastasiosyal.com/post/2009/01/11/Beyond-SoundEx-Functions-for-Fuzzy-Searching-in-MS-SQL-Server