【问题标题】:StandardAnalyzer - Apache LuceneStandardAnalyzer - Apache Lucene
【发布时间】:2012-01-11 18:54:55
【问题描述】:

我实际上正在开发一个系统,您将一些文本文件输入到 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 的过滤内容并以可读形式呈现?

【问题讨论】:

    标签: java apache lucene standardanalyzer


    【解决方案1】:

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

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

    【讨论】:

    • 我们可以通过OffsetAttribute类获取每个token的startOffset和endOffset,然后插入适当数量的空格,根据一个token的endOffset与下一个token的startOffset的差值计算。我正在寻找一些更简单的方法。 JFlex mod 会使代码更复杂。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多