Java Lucene TokenFilter和EnglishAnalyzer,用于删除科学文章中的数字

Java Lucene TokenFilter和EnglishAnalyzer,用于删除科学文章中的数字,java,lucene,numbers,token,Java,Lucene,Numbers,Token,我正在为Lucene的科学文章编制索引。我正在使用以下配置: EnglishAnalyzer analyzer = new EnglishAnalyzer(Version.LUCENE_43, EnglishAnalyzer.getDefaultStopSet()); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, analyzer); 这对语言很有好处。但我想删除像“0.99”或“3,14”这样的标记,

我正在为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
实现您想要的功能,它将过滤我们所有不需要的令牌,例如通过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;
        }
在本例中,我将过滤掉所有只包含数字、逗号和点的标记(尽可能使用分隔符)

为了不过滤n=3和其他类似的构造,我建议使用
空白标记器
,仅在空白字符上分割标记


有关完整示例,请看一看

首先,非常感谢!它工作得很好!但我也想把这个“载流子逃逸”转换成这个“载流子逃逸结构”。我的意思是,使用英语分析器。可能吗?再次感谢!EnglishAnalyzer只是小写过滤器、PossesiveFilter、PorterStemming和其他可能无法记住的东西的组合。因此,您也可以手动添加所需内容。EnglishAnalyzer会将n=3分解为您可能不想要的标记
        Tokenizer whitespaceTokenizer = new WhitespaceTokenizer(reader);
        TokenStream tokenStream = new StopFilter(whitespaceTokenizer, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
        tokenStream = new ScientificFiltering(tokenStream);