написать пользовательский анализатор в Pylucene / наследование с использованием JCC? - PullRequest
4 голосов
/ 06 января 2010

Я хочу написать собственный анализатор в пилицене. Обычно в java lucene, когда вы пишете класс анализатора, ваш класс наследует класс lucene Analyzer.

но pylucene использует jcc, компилятор java для c ++ / python.

Итак, как вы позволяете классу Python наследоваться от Java-класса, используя jcc, и особенно, как вы пишете пользовательский анализатор пилицен?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

Вот пример анализатора, который обертывает фильтр EdgeNGram.

import lucene
class EdgeNGramAnalyzer(lucene.PythonAnalyzer):
    '''
    This is an example of a custom Analyzer (in this case an edge-n-gram analyzer)
    EdgeNGram Analyzers are good for type-ahead
    '''

    def __init__(self, side, minlength, maxlength):
        '''
        Args:
            side[enum] Can be one of lucene.EdgeNGramTokenFilter.Side.FRONT or lucene.EdgeNGramTokenFilter.Side.BACK
            minlength[int]
            maxlength[int]
        '''
        lucene.PythonAnalyzer.__init__(self)
        self.side = side
        self.minlength = minlength
        self.maxlength = maxlength

    def tokenStream(self, fieldName, reader):
        result = lucene.LowerCaseTokenizer(Version.LUCENE_CURRENT, reader)
        result = lucene.StandardFilter(result)
        result = lucene.StopFilter(True, result, StopAnalyzer.ENGLISH_STOP_WORDS_SET)
        result = lucene.ASCIIFoldingFilter(result)
        result = lucene.EdgeNGramTokenFilter(result, self.side, self.minlength, self.maxlength)
        return result
1 голос
/ 08 марта 2010

Вы можете наследовать от любого класса в пилуцене, но те, чьи имена начинаются с Python , также расширяют базовый класс Java , то есть делают соответствующие методы "виртуальными" когда вызывается из кода Java. Таким образом, в случае пользовательских анализаторов наследуйте от PythonAnalyzer и реализуйте метод tokenStream .

...