Реализация интеллектуального поиска / нечеткого сравнения строк
У меня есть веб-страница в приложении ASP.NET MVC, где клиенты ищут поставщиков. Поставщики фиксируют свои собственные данные на сайте. Клиенту нужна функция "интеллектуального поиска", где он мог бы искать поставщиков и находить их, даже если написание поставщика "немного отличается" от того, что указано в окне поиска.
Я понятия не имею, что такое понятие "немного другой" у клиента. Я искал в реализации пользовательского алгоритма Soundex. Это преобразует слово в число в зависимости от его звучания. Это число затем используется для сравнения.
Например:
Zach
Zack
будет кодировать к тому же значению. Есть ли другие варианты, которые я мог бы рассмотреть?
2 ответа
Вы можете использовать расстояние Левенштейна в сочетании с полем "теги" на поставщиках в вашей базе данных для функциональности стиля "интеллектуального поиска".
Это довольно простой, но хорошо работает для таких случаев, как "Зак / Зак".
Добавление тегов в вашу базу данных позволяет вам обрабатывать ситуации, когда люди могут искать поставщика по их акрониму или другому разговорному названию.
См. Как рассчитать меру сходства расстояний для двух заданных строк? и http://www.dotnetperls.com/levenshtein для подробностей реализации.
Что вам нужно, так это индексированный поиск с фильтром фонетического анализа.
Lucene.NET предлагает именно это.
Как выполнить фонетический и приблизительный поиск в 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