2012-01-15 5 views
1

基本的なヘブライ語のステミングをしたいと思います。Lucene Analyzerを作成する

カスタムアナライザーのすべての例私はいつも他のアナライザーとフィルターをマージしていますが、文字列レベルの処理は一切行いません。

ストリームの各用語に対して取得するアナライザーを作成する場合は、次の規則で1,2語を送信する: 受信用語が他のもので始まる場合"a"それはそのまま渡されるべきです。 着信タームが "a"で始まる場合は、元のタームと先頭に "a"がなく、ブーストが低い2つのタームが生成されます。

ドキュメントに「help away」がある場合、「help」、「away」、「way 0.8」が返されるようにします。

これを行うには、私はどのような分析装置のメソッドをオーバーライドすべきですか? (同様の性質の例へのポインタが非常に役に立ちます)。ここで

おかげ

答えて

1

は一例です:http://www.java2s.com/Open-Source/Java-Document/Search-Engine/lucene/org/apache/lucene/wordnet/SynonymTokenFilter.java.htm

は、簡単に言えば、コードをスキャンし、同じ位置(同義語)で追加のトークンを放出しなければならないようです。これは、問題のために行う必要があるincrementToken()をオーバーライドすることによって行います(次のトークンのスタックを維持し、1つずつ戻す)。

この例ではうまくいかない場合は、Luceneでシノニムフィルタを実装する方法について説明しているものを探してみてください。これは問題とほぼ同じです。 Lucene in Action本の良い例があります。コードはhttp://www.manning.com/hatcher3/LIAsourcecode.zip、クラスSynonymFilterです。

+0

これは非常に有望です。このQを閉じる前に、私がこの権利を確実に得るためには、おそらく1日か2日かかりますが、本当に良い基礎のように見えます。 (私はちょうど自分の必要な値でスタックを埋める必要があります)。私がそれらをあまり意味のないものにすることができるのであれば、どんな考えですか? – epeleg

+0

ええ、コードで遊ぶ。あなたが本を持っているなら、実際にはluceneがあります。詳細はコードサンプルで説明しています(コードサンプルはbtwという本から入手できます)。 – milan

+0

をあまり意味のないものにするには、同じフィールドに入るなら、ペイロードメカニズムを使用して、自分のスコアラーを実装する必要があるでしょう。 – milan

関連する問題