2017-09-05 11 views
0

私はLuceneで科学記事を索引付けしています。私は次の設定を使用しています:科学記事の数字を削除するためのEnglishAnalyzerを使用したLucene TokenFilter

EnglishAnalyzer analyzer = new EnglishAnalyzer(Version.LUCENE_43, EnglishAnalyzer.getDefaultStopSet()); 

IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, analyzer); 

これは言葉に良いことです。しかし、私は "0.99"や "3,14"のようなトークンを削除したいが、 "H2O"のようなテキストを(1つのトークンに "n = 3"でも可能であれば)保存する。私はSimpleAnalyzerを試しましたが、私が欲しいものではありません。

アイデア?

ありがとうございます!

答えて

1

あなたはカスタムで、しかし簡単なFilteringTokenFilterを達成することができます。これは、regexpなど、すべての必要のないトークンをフィルタリングします。あなたがする必要があるのは、このクラスを拡張し、この場合にはaccept方法

protected boolean accept() throws IOException { 
      String token = new String(termAtt.buffer(), 0 ,termAtt.length()); 
      if (token.matches("[0-9,.]+")) { 
       return false; 
      } 
      return true; 
     } 

を実装することで、私は(可能な区切り文字として)

 Tokenizer whitespaceTokenizer = new WhitespaceTokenizer(reader); 
     TokenStream tokenStream = new StopFilter(whitespaceTokenizer, StopAnalyzer.ENGLISH_STOP_WORDS_SET); 
     tokenStream = new ScientificFiltering(tokenStream); 
を数字のみ、コンマとドットが含まれているすべてのトークンをフィルタリングしています

n = 3などのフィルタリングを行わない場合は、空白文字のみでトークンを分割する場合は、WhitespaceTokenizerを使用することをお勧めします。

詳しくはhere

+0

まずは大変ありがとうございます!完璧に働いています!しかし、私はこの "キャリアの逃避"をこの "キャリア構造の逃避"に変えたいと思っています。つまり、EnglishAnalyzersを使うことです。出来ますか?再度、感謝します! –

+1

EnglishAnalyzerはLowerCaseFilter、PossesiveFilter、PorterStemmingの組み合わせであり、多分それを心に覚えていない可能性があります。したがって、手動で必要なものだけを追加することもできます。 EnglishAnalyzerはn = 3をトークンに分解します – Mysterion

関連する問題