我想在pylucene中編寫自定義分析器。 通常在java lucene中,當你編寫一個分析器類時,你的類繼承了lucene的Analyzer類。使用jcc在pylucene/inheritance中編寫自定義anaylzer?
但是pylucene使用jcc,java把C++/python編譯器。
那麼如何讓一個python類從java類繼承使用jcc,尤其是如何編寫一個自定義的pylucene分析器呢?
謝謝。
我想在pylucene中編寫自定義分析器。 通常在java lucene中,當你編寫一個分析器類時,你的類繼承了lucene的Analyzer類。使用jcc在pylucene/inheritance中編寫自定義anaylzer?
但是pylucene使用jcc,java把C++/python編譯器。
那麼如何讓一個python類從java類繼承使用jcc,尤其是如何編寫一個自定義的pylucene分析器呢?
謝謝。
您可以從任何pylucene類繼承,但名稱以Python的啓動者也將extend the underlying Java class,即,使相關方法「虛擬」從Java代碼調用時。所以在定製分析儀的情況下,從繼承PythonAnalyzer並實施tokenStream方法。
任何「祕密」,使這項工作?我已經嘗試從'PythonAnalyzer'和'ReusableAnalyzerBase'繼承,並且在創建查詢分析器實例時都生成無效的args異常 – Justin 2011-12-08 17:31:53
下面是一個包裝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
你錯過了一個單詞。 「特別是」什麼? – jcdyer 2010-01-06 12:39:17