这是我上一个问题的延续。我正在使用 Lucene 3.6.1 并想创建一个自定义分析器来创建如下标记:-I/P 文本 :- foo bar代币:- f,fo,foo,b,ba,barI/P 文本 :- HEllo 123代币:- h,he,hel,hell,hello,1,12,123。基本上,它将文本转换为小写,然后使用边缘 n-gram 标记过滤器。下面是我的自定义分析器的 java 代码。@Override public TokenStream tokenStream(String fieldName, Reader reader) { TokenStream stream = new KeywordTokenizer(reader); TokenStream result = new EdgeNGramTokenFilter(stream, EdgeNGramTokenFilter.Side.FRONT, 1, 30); //OffsetAttribute offsetAttribute = result.addAttribute(OffsetAttribute.class); CharTermAttribute charTermAttribute = result.addAttribute(CharTermAttribute.class); try { result.reset(); while (result.incrementToken()) { //int startOffset = offsetAttribute.startOffset(); //int endOffset = offsetAttribute.endOffset(); System.out.println(charTermAttribute.toString()); } result.end(); result.close(); } catch (IOException e) { e.printStackTrace(); } return result; }但它返回低于foo bar.ffofoofoo foo bfoo bafoo bar让我知道我的代码中缺少什么。
1 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
您需要使用StandardTokenizer
而不是KeywordTokenizer
。后者将简单地将整个输入视为单个标记,而前者将小写并将输入拆分为多个标记。
所以改变这个:
TokenStream stream = new KeywordTokenizer(reader);
对此:
TokenStream stream = new StandardTokenizer(reader);
添加回答
举报
0/150
提交
取消