這是我上一個問題的延續(xù)。我正在使用 Lucene 3.6.1 并想創(chuàng)建一個自定義分析器來創(chuàng)建如下標記:-I/P 文本 :- foo bar代幣:- f,fo,foo,b,ba,barI/P 文本 :- HEllo 123代幣:- h,he,hel,hell,hello,1,12,123。基本上,它將文本轉(zhuǎn)換為小寫,然后使用邊緣 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條經(jīng)驗 獲得超7個贊
您需要使用StandardTokenizer
而不是KeywordTokenizer
。后者將簡單地將整個輸入視為單個標記,而前者將小寫并將輸入拆分為多個標記。
所以改變這個:
TokenStream stream = new KeywordTokenizer(reader);
對此:
TokenStream stream = new StandardTokenizer(reader);
添加回答
舉報
0/150
提交
取消