2011-11-14 9 views
1

に私はLucene.Net 2.9.2を使用していると私は私がカスタムトークナイザを作成する必要があります数えるが、私は何かを明らかに不足して頂く場合にチェックしたいです。トークン化のキーワードはLucene.Net

文書は、タイトル、キーワードおよびコンテンツプラスなど、著者、日付フィールドとして格納された各ようないくつかのメタデータで構成されています。ドキュメントはソフトウェア技術文書であり、タイトル、キーワード、および/またはコンテンツに '.Net'、 'C​​ ++'、 'C​​#'などのフレーズを含むことがあります。

私はキーワードフィールドとStandardAnalyzerタイトルのためにとコンテンツのためKeywordAnalyzerを使用しています - 文書が非常に長くなることとしてストップワードと小文字などが必要です。

「C#」のように検索したいだけでなく、「CSharp」、「C#.Net」なども検索するように検索用のシノニムカスタムフィルタを作成しました。トークナイザは既に '#' 「C#」や「++」がC++の「C」言語リファレンスと混同されている可能性があります。

私はトークン化を分岐させる必要があるタイトルとコンテンツをインデックス化するとき現在のトークンがキーワード句の一部であるか、またはその同義語のいずれかであるかどうかを判定します。

は、最善のアプローチですか?多くの感謝の前に:)

答えて

1

WhitespaceTokenizerを使用して、KeywordMarkerFilterをプラグインして、いくつかのトークンを「不可侵」とマークし、最後に句読点を取り除く独自のフィルタを提供すると思います。おそらく、Lucene.Netの知識を持つ人は、何かを示唆します。例えばSolrでWordDelimiterFilterを使用することができます。

1):

+0

こんにちはアルトゥル、あなたの答えに感謝。私は、KeywordMarkerFilterがバージョン3.1のJava APIに導入されたと考えています。現在は2.9.2が最新バージョンであるため、現在は.netでサポートされていません。しかし、あなたが提案していることは、私が考えていることです。すなわち、.netでカスタムトークナイザをエミュレートすることです。おかげで再び:) – eslsys

+0

あなたは、私は、ビューのLuceneのポイントからの質問に答えた正しいそれはそれにもかかわらずに役立ちます願っています。 –

+0

Arturのおかげで、私のアプローチの潜在的な選択肢の絞り込みに役立ちました。他の誰かが視点を持っている場合には、数日後に質問を残しておきます。おかげで再び – eslsys

2

はトークナイザのカスタマイズは、下記のクラスのいずれかで行うことができます。 Lucene.Net.Analysis.CharTokenizer 2)。 Lucene.Net.Analysis.Tokenizer

public class AlphaNumbericTokenizer : Lucene.Net.Analysis.CharTokenizer 
{ 
    public AlphaNumbericTokenizer (System.IO.TextReader input) : base(input) 
    { 
    } 
    protected override bool IsTokenChar(char c) 
    { 
     //TODO: Logic for identifying token or token separator 
     return char.IsLetterOrDigit(c); 
    } 
} 

参照してください、http://karticles.com/NoSql/lucene_custom_tokenizer.html

+0

私はこれを解決するには、わずかに異なるルートを行ってきました - 私は、ブログの記事でそれを書いて、ソリューションの概要とここにリンクを投稿します。答えてくれてありがとうvrluckyin :) – eslsys