StandardAnalyzer - Apache Lucene

时间:2012-01-11 18:54:55

标签: java apache lucene standardanalyzer

我实际上正在开发一个系统,您可以在其中输入一些文本文件到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)是一个简单的函数,它将文件内容转换为字符串表示形式。 我得到的输出是每个带有空格的单词或它们之间的新行被删除。有没有办法在分析器输出后保留原始空格或新行字符,以便我可以用StandardAnalyzer的过滤内容替换原始文件内容并以可读形式呈现?

1 个答案:

答案 0 :(得分:0)

Tokenizers保存术语位置,因此理论上您可以查看位置以确定每个令牌之间有多少个字符,但它们不会保存令牌之间的数据。所以你可以找回空格,但不能换行。

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