私はルセンとピルセンにかなり慣れていません。これは、ピルセンを使用してカスタマイズされたアナライザーを作成し、テキストをバイグラムにトークン化するときに問題になります。
アナライザー クラスのコードは次のとおりです。
class BiGramShingleAnalyzer(PythonAnalyzer):
def __init__(self, outputUnigrams=False):
PythonAnalyzer.__init__(self)
self.outputUnigrams = outputUnigrams
def tokenStream(self, field, reader):
result = ShingleFilter(LowerCaseTokenizer(Version.LUCENE_35,reader))
result.setOutputUnigrams(self.outputUnigrams)
#print 'result is', result
return result
LowerCaseTokeinizer によって生成された TokenStream で、ShingleFilter を使用しました。tokenStream 関数を直接呼び出すと、次のように機能します。
str = ‘divide this sentence'
bi = BiGramShingleAnalyzer(False)
sf = bi.tokenStream('f', StringReader(str))
while sf.incrementToken():
print sf
(divide this,startOffset=0,endOffset=11,positionIncrement=1,type=shingle)
(this sentence,startOffset=7,endOffset=20,positionIncrement=1,type=shingle)
しかし、このアナライザーを使用してクエリ パーサーを作成しようとすると、次のような問題が発生しました。
parser = QueryParser(Version.LUCENE_35, 'f', bi)
query = parser.parse(str)
クエリには何もありません。
tokenStream 関数に print ステートメントを追加した後、parser.parse(str) を呼び出すと、tokenStream の print ステートメントが実際に 3 回 (str 変数に 3 語) 呼び出されることがわかりました。パーサーは、渡した str を前処理し、前処理の結果で tokenStream 関数を呼び出しているようです。
アナライザーをどのように機能させるべきかについての考えはありますか?それをクエリパーサーに渡すと、パーサーは文字列をバイグラムに解析できますか?
前もって感謝します!