Java 标准分析器-Apache Lucene
我实际上正在开发一个系统,在这个系统中,您向StandardAnalyzer输入一些文本文件,然后该文件的内容被StandardAnalyzer的输出所替换(它标记并删除所有停止字)。到目前为止,我制定的代码是: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)));
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将使代码更加复杂。无论如何,谢谢你。