Реализация интеллектуального поиска / нечеткого сравнения строк

У меня есть веб-страница в приложении ASP.NET MVC, где клиенты ищут поставщиков. Поставщики фиксируют свои собственные данные на сайте. Клиенту нужна функция "интеллектуального поиска", где он мог бы искать поставщиков и находить их, даже если написание поставщика "немного отличается" от того, что указано в окне поиска.

Я понятия не имею, что такое понятие "немного другой" у клиента. Я искал в реализации пользовательского алгоритма Soundex. Это преобразует слово в число в зависимости от его звучания. Это число затем используется для сравнения.

Например:

Zach

Zack

будет кодировать к тому же значению. Есть ли другие варианты, которые я мог бы рассмотреть?

2 ответа

Решение

Вы можете использовать расстояние Левенштейна в сочетании с полем "теги" на поставщиках в вашей базе данных для функциональности стиля "интеллектуального поиска".

Это довольно простой, но хорошо работает для таких случаев, как "Зак / Зак".

Добавление тегов в вашу базу данных позволяет вам обрабатывать ситуации, когда люди могут искать поставщика по их акрониму или другому разговорному названию.

См. Как рассчитать меру сходства расстояний для двух заданных строк? и http://www.dotnetperls.com/levenshtein для подробностей реализации.

Что вам нужно, так это индексированный поиск с фильтром фонетического анализа.

Lucene.NET предлагает именно это.

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

Как выполнить фонетический и приблизительный поиск в Lucene.net

Смотрите здесь.NET-версию Phonetix:
http://sourceforge.net/projects/phonetixnet/

Вот еще немного информации о том, как реализовать это в C#:
lucene.net фонетический фильтр

Вы также можете использовать BeiderMorseEncoder, который предназначен для работы со многими языками.

Что касается поиска слов с одинаковыми словами, почему бы не использовать вместо этого нечеткий поиск?
как сделать нечеткий поиск в Lucene.net в asp.net?
Lucene.net Поиск нечетких фраз

Существует также множество функций строковых метрик, которые вы можете использовать с помощью CLR-Stored-Процедура: http://anastasiosyal.com/post/2009/01/11/Beyond-SoundEx-Functions-for-Fuzzy-Searching-in-MS-SQL-Server

Другие вопросы по тегам