我正在与Lucene索引科学文章。我使用以下配置:
EnglishAnalyzer analyzer = new EnglishAnalyzer(Version.LUCENE_43, EnglishAnalyzer.getDefaultStopSet());
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, analyzer);
这对言语有好处。但我想删除类似于" 0.99"的令牌。或" 3,14"但保留文字,如" H2O" (如果有可能在一个标记中也是" n = 3")。我试过SimpleAnalyzer
,但不是我想要的。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
您可以使用自定义,但简单的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