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

"Ты имел ввиду?" в Lucene.net

Может кто-нибудь, пожалуйста, дайте мне знать, как мне реализовать функцию "Вы имели в виду" в Lucene.net?

Спасибо!

4b9b3361

Ответ 1

Вы должны изучить модуль SpellChecker в каталоге contrib. Это порт Java lucene SpellChecker, поэтому его документация должно быть полезно.

(Из javadocs:)

Пример использования:

  import org.apache.lucene.search.spell.SpellChecker;

  SpellChecker spellchecker = new SpellChecker(spellIndexDirectory);
  // To index a field of a user index:
  spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field));
  // To index a file containing words:
  spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt")));
  String[] suggestions = spellchecker.suggestSimilar("misspelt", 5);

Ответ 2

AFAIK Lucene поддерживает поиск по близости, что означает, что если вы используете что-то вроде:

поле: stirng ~ 0,5

(это знак тильды)

будет соответствовать строке. float - это то, как "толерантен" поиск, где 1.0 - точное совпадение, а 0.0 - все (вроде).

Однако разные парсеры будут реализовывать это по-другому.

Поиск по близости намного медленнее, чем нечеткий поиск (stri *), поэтому используйте его с осторожностью. В вашем случае можно предположить, что если вы не найдете совпадений в обычном поиске, попробуйте поиск по близости, чтобы увидеть, что вы найдете, и представите "как вы имели в виду" на основе результата каким-то образом.

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

Ответ 3

Google "Вы имели в виду?" (вероятно, они скрытные, конечно) реализованы путем консультаций с их журналом запросов. Посмотрите, были ли люди, которые искали запрос, который вы обрабатывали, искали что-то очень похожее вскоре; если это так, это означает, что они допустили ошибку и поняли, что они должны искать.

Поскольку у вас, вероятно, нет огромного журнала запросов, вы можете приблизиться к нему. Возьмите запрос, разделите термины, посмотрите, есть ли какие-либо схожие термины в базе данных (на расстоянии редактирования, что угодно); замените свои термины теми близкими условиями и повторите запрос. Если вы получаете больше хитов, это, вероятно, лучший запрос. Предложите это пользователю. (И поскольку у вас уже есть хиты, и большинство людей смотрят только на 2 лучших результата, покажите им их.)

Ответ 4

Взгляните на проект кода google под названием semanticvectors. Там приличная дискуссия о списках рассылки Lucene для выполнения функций, таких как то, что вы использовали после ее использования, однако она написана в java.

Вам, вероятно, придется разбирать и использовать некоторые алгоритмы обучения компьютера в ваших журналах поиска, чтобы создать такую ​​функцию!