我正在使用 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
但不是我想要的。
有什么想法吗?
谢谢!
最佳答案
您可以使用自定义但简单的 FilteringTokenFilter
来实现您想要的目标,它将过滤我们所有不需要的 token ,例如通过正则表达式。您需要做的就是扩展此类并实现 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
关于java - Lucene TokenFilter 与 EnglishAnalyzer 用于删除科学文章中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46050874/