为了账号安全,请及时绑定邮箱和手机立即绑定

java中的自定义分析器,使用edgeNGram令牌过滤器

java中的自定义分析器,使用edgeNGram令牌过滤器

白板的微信 2021-08-13 16:49:35
这是我上一个问题的延续。我正在使用 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);


查看完整回答
反对 回复 2021-08-13
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信