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

标签 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”这样的标记,但在一个标记中保留像“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/

相关文章:

java - 无法实例化类

c# - 简单的 PhraseQuery 找不到任何结果

c# - 在C#中查找数字的位数

正则表达式从不工作 Elasticsearch 6.* 开始

javascript - 与 JS 中的 Number.toExponential 相反

c++ - C++ 中的 float 到二进制数

java - Android和ObjectOutputStream到资源文件

java - Dojo 1.7 eclipse错误

java - 提高设置 TextView RecyclerView 时的跨度/可跨度性能

Lucene .Net 优化流程