首页 > 代码库 > 06.中文分析器IKAnalyzer

06.中文分析器IKAnalyzer

为什么需要使用IKAnalyzer

  • Lucene自带的标准分析器无法中文分词
  • Lucene自带的中文分析器分词不准确
  • IKAnalyzer支持屏蔽关键词、新词汇的配置

使用示例

建立索引时

QueryParser查询时

单独使用进行分词
自定义词库

  1. classpath下定义IKAnalyzer.cfg.xml文件,如下:
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  4. <properties>
  5. <comment>IK Analyzer 扩展配置</comment>
  6. <!-- 用户可以在这里配置自己的扩展字典 -->
  7. <entry key="ext_dict">dicdata/mydict.dic</entry>
  8. <!-- 用户可以在这里配置自己的扩展停用词字典 -->
  9. <entry key="ext_stopwords">dicdata/ext_stopword.dic</entry>
  10. </properties>
  11. classpath下的编辑dicdata/mydict.dic文件,此文件中存储扩展词库,在dicdata/ext_stopword.dic文件中存放停用词。
  12. 注意:mydict.dicext_stopword.dic文件的格式为UTF-8,注意是无BOM UTF-8 编码。

查看分词效果

  1. //创建分析器
  2. Analyzer analyzer = new IKAnalyzer();
  3. //得到TokenStream
  4. TokenStream tokenStream = analyzer.tokenStream("content", new StringReader("Lucene is a Java full-text search engine"));
  5. //设置tokenStream初始状态,否则会抛异常
  6. tokenStream.reset();
  7. //设置要获取分词的偏移量
  8. OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
  9. //设置要获取分词的项
  10. CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
  11. while(tokenStream.incrementToken()){
  12. System.out.println("-----------------");
  13. //起始偏移量
  14. System.out.print("-->"+offsetAttribute.startOffset());
  15. //截止偏移量
  16. System.out.print("-->"+offsetAttribute.endOffset());
  17. //分词项的值
  18. System.out.println("-->"+new String(charTermAttribute.toString()));

注意

  • 使用什么分析器建立索引最好使用相同的分析器查询
  • IKAnalyzer的配置文件名称可以自定义

06.中文分析器IKAnalyzer