Пользовательские стоп-слова для PyLucene

В PyLucene есть фильтр StopFilter, который фильтрует токены на основе заданных стоп-слов. Пример вызова выглядит следующим образом:

result = StopFilter(True, result, StopAnalyzer.ENGLISH_STOP_WORDS_SET)

Кажется, что заменить аргумент на набор стоп-слов должно быть легко, но на самом деле это немного сложно:

>>> StopAnalyzer.ENGLISH_STOP_WORDS_SET

<Set: [but, be, with, such, then, for, no, will, not, are, and, their, if, this, on, into, a, or, there, in, that, they, was, is, it, an, the, as, at, these, by, to, of]>

Это Set, который не может быть реализован:

>>> Set()

NotImplementedError: ('instantiating java class', <type 'Set'>)

В другом месте было предложено использовать PythonSet, который поставляется с PyLucene, но оказалось, что это не экземпляр Set, и его нельзя использовать с StopFilter.

Как можно дать StopFilter новый набор стоп-слов?


person alexplanation    schedule 07.02.2013    source источник


Ответы (1)


Я нашел ответ на этот вопрос на полпути, написав этот вопрос в этой теме в списке разработчиков pylucene:

http://mail-archives.apache.org/mod_mbox/lucene-pylucene-dev/201202.mbox/thread

Вы можете определить StopFilter с помощью пользовательского списка следующим образом:

mystops = HashSet(Arrays.asList(['a','b','c']))
result = StopFilter(True, result, mystops)
person alexplanation    schedule 07.02.2013
comment
Ага. В Java Set() — это интерфейс. Для создания экземпляра вам нужна реализация этого интерфейса, например HashSet(). - person Mel Nicholson; 08.02.2013