Подтвердить что ты не робот

Легкая библиотека нечеткого поиска

Можете ли вы предложить небольшую библиотеку поиска нечеткого текста?

Что я хочу сделать, так это разрешить пользователям находить правильные данные для поисковых запросов с опечатками.

Я мог бы использовать полнотекстовые поисковые системы, такие как Lucene, но я думаю, что это перебор.

Edit:
Чтобы сделать более понятным вопрос, это основной сценарий для этой библиотеки:
У меня есть большой список строк. Я хочу, чтобы иметь возможность искать в этом списке (что-то вроде MSVS intellisense), но должно быть возможно отфильтровать этот список по строкам, который отсутствует в нем, но достаточно близко к некоторой строке, которая находится в списке.
Пример:

  • Красный
  • Green
  • синий

Когда я печатаю "Gren" или "Geen" в текстовом поле, я хочу видеть "Green" в результирующем наборе.

Основным языком для индексированных данных будет английский.

Я думаю, что Луцену тяжело для этой задачи.

Обновление

Я нашел один продукт, соответствующий моим требованиям. Это ShuffleText.
Знаете ли вы какие-либо альтернативы?

4b9b3361

Ответ 1

Lucene очень масштабируема, что тоже хорошо для небольших приложений. Вы можете создать индекс в памяти очень быстро, если это все, что вам нужно.

Для нечеткого поиска вам действительно нужно решить, какой алгоритм вы хотите использовать. При поиске информации я использую технику n-gram при успешной работе Lucene. Но это специальная техника индексирования, а не сама "библиотека".

Не зная больше о вашем приложении, будет нелегко рекомендовать подходящую библиотеку. Сколько данных вы ищете? Какой формат данных? Как часто обновляются данные?

Ответ 2

Я не уверен, насколько хорошо Lucene подходит для нечетких поисков, пользовательская библиотека будет лучшим выбором. Например, этот поиск выполняется на Java и работает довольно быстро, но он выполнен на заказ для такой задачи: http://www.softcorporation.com/products/people/

Ответ 3

Soundex очень "английский" в этом кодировании - Дайч-Мокотофф работает лучше для многих имен, особенно европейских (германских) и еврейских имен. В моем британском мире это то, что я использую.

Wiki здесь.

Ответ 4

Если вы можете использовать базу данных, я рекомендую использовать PostgreSQL и функции с нечеткой строкой.

Если вы можете использовать Ruby, я предлагаю заглянуть в amatch library.

Ответ 5

Вы не указали свою платформу разработки, но если ее PHP предложит вам взглянуть на ZEND Lucene lubrary:

http://ifacethoughts.net/2008/02/07/zend-brings-lucene-to-php/ http://framework.zend.com/manual/en/zend.search.lucene.html

Как и LAMP, он намного легче, чем Lucene на Java, и его можно легко расширить для других типов файлов при условии, что вы можете найти библиотеку преобразования или конвертер строк cmd - для этого есть много решений OSS.

Ответ 6

Попробуйте Walnutil - основанный на Lucene API - интегрированный в SQL Server и Oracle DB. Вы можете создать любой тип индекса, а затем использовать его. Для простого поиска вы можете использовать некоторые методы из walnutilsoft, для более сложных случаев поиска вы можете использовать Lucene API. См. Веб-пример, где были использованы индексы, созданные из инструментов Walnutil. Также вы можете увидеть пример кода, написанный на Java и С#, который вы можете использовать для создания другого типа поиска. Эти инструменты бесплатны. http://www.walnutilsoft.com/

Ответ 7

@aku - ссылки на рабочие библиотеки soundex находятся там, внизу страницы.

Что касается расстояния Левенштейна, статья Википедии об этом также имеет реализации, перечисленные внизу.

Ответ 8

Мощное, легкое решение sphinx.

Он меньше, чем Lucene, и поддерживает неоднозначность.

Он написан на С++, он быстро, проверен на битву, имеет библиотеки для каждого env и используется крупными компаниями, такими как craigslists.org