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

    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的过滤内容,并以可读的形式显示它?

最佳答案

令牌生成器保存术语位置,因此从理论上讲,您可以查看该位置来确定每个令牌之间有多少个字符,但是它们不保存令牌之间的数据。这样您可以退回空格,但不能换行。

如果您对JFlex感到满意,则可以修改令牌生成器以将换行符视为令牌。不过,这可能比您从中获得的任何收益都要难。

10-05 23:11