2013-09-30 2 views
3

Я хотел бы построить индекс, содержащий п-грамм каждой строки из моего входного файла, который выглядит следующим образом:создавать и запрашивать индекс энграмм с Lucene

Segeln bei den Olympischen Sommerspielen 
Erdmond 
Olympische Spiele 
Turnen bei den Olympischen Sommerspielen 
Tennis bei den Olympischen Sommerspielen 
Geschichte der Astronomie 

мне нужно п-г потому что я хотел бы искать в индексе, но я должен предположить, что в поисковом периоде имеется много ошибок ввода. Например, я хотел бы найти «Geschichte der Astronomie», если я буду искать термин «schichte astrologie». Было бы даже лучше, если бы он дал мне список лучших возможных матчей, скажем, лучшие 10 матчей, как бы они ни были плохими. Надеюсь, вы можете указать мне в правильном направлении, если будет лучший способ достичь этого, чем с помощью n-граммов, или что у вас есть подсказка о том, как создать индекс и как его запросить. Я был бы очень рад получить пример, который поможет мне понять, как это сделать. В настоящее время я использую lucene 4.3.1. Я бы предпочел реализовать его в java и не построить индекс в командной строке.

ответ

1

Существует множество различных способов решения этой проблемы, и у Lucene есть много инструментов, которые помогут им. На мой взгляд, N-граммы, вероятно, не лучший подход в этой ситуации.

  • парадигматических сократить сроки их корень, на основе лингвистических правил (напр., Соответствующие «рыбалка» «выловили» и «рыба) (я не утверждаю, что знаю, как GermanStemmer обрабатывает префикс„GE“, но что было бы хорошим примером того, с чем может столкнуться стволовый)
  • Фильтр синонимов может обрабатывать определенные известные синонимы, которые вы хотите распознать (например, «астрология» = «астрономия»)
  • Нечеткие запросы могут использоваться для получения совпадения с малыми расстояниями редактирования.

Среди других возможностей.

Что касается реализации на NGrams, то NGramTokenizer будет правильным токенизатором для этого.

+0

Спасибо за ваш ответ. Я попробовал кое-что с GermanStemmer и не был удовлетворен. Также я не ищу синонимы, но для ввода ошибок и т. Д. Нечеткие запросы также не работают, потому что они не могут дать мне столько предложений, сколько мне нужно, если поисковый запрос очень далек от всего, что содержится в моем индексе. NGramTokenizer выглядит очень многообещающим, у вас есть пример, как построить индекс и запросить его с помощью NGramTokenizer? – tadumtada

Смежные вопросы