> 文章列表 > ik分词

ik分词

ik分词

一. 初始化IKAnalyzer对象

IKAnalyzer ikAnalyzer = new IKAnalyzer(true);
  1. ik_max_word
    会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。
  2. ik_smart
    会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

索引时用 ik_max_word
查询时用 ik_smart
使用智能分词 true: 对应 ik_smart , false 对应 ik_max_word

二.调用Analyzer对象的tokenStream方法获取TokenStream对象,此对象包含了所有分词结果
这个方法接收两个参数,field name和输入流reader,其中filed name是Lucene的属性列,是对文本内容进行过分词处理和创建索引之后,索引对应的一个名称,类似数据库的列名。因为IK仅仅涉及分词处理,所以对field name没有进行任何处理,可以设置为null

TokenStream stream = ikAnalyzer.tokenStream(null, new StringReader(content));

三.给tokenStyream对象设置一个指针,指针就在哪一个分词上

CharTermAttribute charTermAttribute=tokenStream.addAttribute(CharTermAttribute.class);

四.调用tokenStream对象的reset方法,重置指针,不调用会报错

tokenStream.reset();

五.利用while循环,拿到分词列表的结果 incrementToken方法返回值如果为false代表读取完毕 true代表没有读取完毕

while(tokenStream.incrementToken()) {System.out.print(charTermAttribute.toString() );
}

六.关闭流

tokenStream.close();