Lucene.Net/SpellChecker - автоматическое предложение на основе нескольких слов / фраз - PullRequest
3 голосов
/ 25 июня 2010

Я внедрил Lucenet.NET на своем сайте, используя его для индексации своих продуктов, таких как театральные представления, экскурсии и аттракционы по Лондону.

Я хочу реализовать "Вы имели в виду?" функция, когда пользователи неправильно пишут названия продуктов, которая учитывает целые названия продуктов, а не только отдельные слова. Например,

Если пользователь набрал:

Глаз Лоднона

Я бы хотел автоматически предложить:

Лондон Лондонский глаз

Полагаю, мне не нужно, чтобы анализатор индексировал заголовки, как если бы они были единым целым, чтобы SpellChecker мог максимально точно соответствовать фразе и отдельным словам.

Как бы я это сделал?

Ответы [ 3 ]

10 голосов
/ 16 декабря 2010

Здесь есть отличная серия блогов:

  1. Lucene.NET
  2. Введение в Lucene
  3. Основы индексирования
  4. Основы поиска
  5. Вы имели в виду ..
  6. Фасетный поиск
  7. Ссылка на класс

Я также нашел другой проект под названием SimpleLucene, который вы можете использовать для поддержки ваших индексов lucene всякий раз, когда вам нужно обновить или удалить документ. Читайте об этом здесь

7 голосов
/ 18 февраля 2011

Я только недавно внедрил систему автозаполнения фраз в lucene.net.

По сути, в java-версии lucene имеется фильтр shinglefilter в одной из папок contrib, который разбивает предложение на все возможные комбинации фраз.,К сожалению, фильтры вкладов lucene.nets еще не совсем созданы, поэтому у нас нет фильтра shingle.

, но индекс lucene, написанный на java, может быть прочитан lucene.net, если версиитот же самый.поэтому я сделал следующее:

создал индекс заклинаний в lucene.net, используя метод spellcheck.IndexDictionary, как изложено в разделе «ты имел в виду» ссылки Джейка Скотта.обратите внимание, что создается только орфографический индекс отдельных слов, а не фраз.

Затем я создал приложение Java, которое использует фильтр shingle для создания фраз текста, который я ищу, и сохраняет его во временном индексе.

Затем я написал другой метод в dotnet, чтобы открыть этот временный указатель и добавить каждую фразу в виде строки или документа в мой орфографический указатель, который уже содержит отдельные слова.хитрость заключается в том, чтобы убедиться, что добавляемые вами документы имеют ту же форму, что и остальные документы заклинаний, поэтому я извлек методы, использованные в коде проверки орфографии в проекте lucene.net, и отредактировал их.

как только вы это сделаете, вы можете вызвать метод spellcheck.suggests Similar и передать ему фразу с ошибкой, и она вернет вам действительное предложение.

0 голосов
/ 21 февраля 2011

Это, вероятно, не лучшее решение, и я определенно использовал бы ответ, предложенный космонавтом, но вот другое возможное решение. Используйте KeywordAnalyzer или KeywordTonenizer для каждого заголовка, это не будет разбивать заголовок на отдельные токены, но сохранит его как один токен. Использование метода SuggestShopple возвращает весь заголовок в качестве предложений.

...