2

私はルセンとピルセンにかなり慣れていません。これは、ピルセンを使用してカスタマイズされたアナライザーを作成し、テキストをバイグラムにトークン化するときに問題になります。

アナライザー クラスのコードは次のとおりです。

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 関数を呼び出しているようです。

アナライザーをどのように機能させるべきかについての考えはありますか?それをクエリパーサーに渡すと、パーサーは文字列をバイグラムに解析できますか?

前もって感謝します!

4

0 に答える 0