2010-01-06 3 views
3

나는 pylucene에 주문 분석기를 쓰고 싶다. 보통 Java 루씬에서는 분석기 클래스를 작성할 때 클래스가 lucene의 Analyzer 클래스를 상속합니다.jcc를 사용하여 pylucene/상속에 사용자 정의 anaylzer 작성 하시겠습니까?

하지만 pylucene은 java to C++/python 컴파일러 인 jcc를 사용합니다.

그래서 파이썬 클래스가 jcc를 사용하여 자바 클래스를 상속하도록하려면 어떻게해야합니까? 특히 사용자 정의 pylucene 분석기를 작성하는 방법은 무엇입니까?

감사합니다.

+0

당신은 거기에 단어를 잃어 버렸습니다. "그리고 특히"무엇? – jcdyer

답변

0

당신은 pylucene의 모든 클래스에서 상속 할 수 있지만, 파이썬로 시작하는 이름을 가진 사람은 extend the underlying Java class, 즉, 자바 코드에서 호출 할 때 관련 방법 "가상"할 것입니다. 따라서 사용자 정의 분석기의 경우 PythonAnalyzer에서 상속 받고 tokenStream 메소드를 구현하십시오.

+0

이 작품을 만들기위한 "비밀"은 무엇입니까 ?? 나는'PythonAnalyzer'와'ReusableAnalyzerBase'를 상속 받았다. 둘 다 query-parser 인스턴스를 생성 할 때 잘못된 args 예외를 발생시킨다. – Justin

1

다음은 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