gpt4 book ai didi

java - Lucene TokenFilter 与 EnglishAnalyzer 用于删除科学文章中的数字

转载 作者:行者123 更新时间:2023-11-30 02:24:24 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com