Java 标准分析器-Apache Lucene

Java 标准分析器-Apache Lucene,java,apache,lucene,standardanalyzer,Java,Apache,Lucene,Standardanalyzer,我实际上正在开发一个系统,在这个系统中,您向StandardAnalyzer输入一些文本文件,然后该文件的内容被StandardAnalyzer的输出所替换(它标记并删除所有停止字)。到目前为止,我制定的代码是: File f = new File(path); TokenStream stream = analyzer.tokenStream("contents", new StringReader(readFileToString(f)));

我实际上正在开发一个系统,在这个系统中,您向StandardAnalyzer输入一些文本文件,然后该文件的内容被StandardAnalyzer的输出所替换(它标记并删除所有停止字)。到目前为止,我制定的代码是:

    File f = new File(path);

    TokenStream stream = analyzer.tokenStream("contents", 
            new StringReader(readFileToString(f)));

    CharTermAttribute charTermAttribute = stream.getAttribute(CharTermAttribute.class);

        while (stream.incrementToken()) {
            String term = charTermAttribute.toString();
            System.out.print(term);
        }

           //Following is the readFileToString(File f) function
     StringBuilder textBuilder = new StringBuilder();
     String ls = System.getProperty("line.separator");
     Scanner scanner = new Scanner(new FileInputStream(f));

     while (scanner.hasNextLine()){
          textBuilder.append(scanner.nextLine() + ls);
      }
      scanner.close();
    return textBuilder.toString();
readFileToString(f)是一个简单的函数,它将文件内容转换为字符串表示形式。
我得到的输出是每个单词之间都删除了空格或新行。是否有办法在analyzer输出后保留原始空格或新行字符,以便我可以用StandardAnalyzer的过滤内容替换原始文件内容,并以可读的形式呈现?

标记器保存术语位置,因此,理论上,你可以查看位置来确定每个标记之间有多少个字符,但它们不会保存标记之间的数据。所以你可以得到空间,但不能换行


如果您对JFlex感到满意,可以修改标记器,将换行符视为标记。这可能比您从中获得的任何收益都要困难。

我们可以使用OffsetAttribute类获取每个令牌的startOffset和endOffset,然后插入适当数量的空格,这些空格由一个令牌的endOffset和下一个令牌的startOffset之差计算得出。我在寻找更简单的方法。JFlex mod将使代码更加复杂。无论如何,谢谢你。