当前位置:   article > 正文

利用IK分词器,自定义分词规则

自定义分词规则

IK分词源码下载地址:https://code.google.com/p/ik-analyzer/downloads/list

lucene源码下载地址:http://www.eu.apache.org/dist/lucene/java/

 

下载IK分词源码后,运行出现错误提示:

  1. Analyzer cannot be resolved to a type
  2. TokenStream cannot be resolved to a type
  3. OffsetAttribute cannot be resolved to a type
  4. OffsetAttribute cannot be resolved to a type
  5. CharTermAttribute cannot be resolved to a type
  6. CharTermAttribute cannot be resolved to a type
  7. TypeAttribute cannot be resolved to a type
  8. TypeAttribute cannot be resolved to a type

 解决办法:

在项目project -->clean 下即可

自定义分词规则步骤:

里面的例子:

  1. import java.io.IOException;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.Map.Entry;
  5. import org.apache.lucene.analysis.Analyzer;
  6. import org.apache.lucene.analysis.TokenStream;
  7. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
  8. import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
  9. import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
  10. import org.wltea.analyzer.lucene.IKAnalyzer;
  11. public static void main(String[] args) {
  12. String testString = "张柏芝士蛋糕房 ZHANG'S CAKE SHOP,网友们Hold不住了:宋祖英语培训班、周渝民政服务中心、容祖儿童医院、吴奇隆胸医院、苏永康复中心、梁朝伟哥专卖、陈冠希望小学、吴彦祖传中医坊、林书豪华酒店";
  13. iktest1(testString);
  14. }
  15. // 实现普通分词
  16. public static Map<String, Object> iktest1(String testString){
  17. Map<String, Object> resultsMap = new HashMap<String, Object>();
  18. Analyzer ikAnalyzer = new IKAnalyzer(true);
  19. TokenStream ts = null;
  20. try {
  21. ts = ikAnalyzer.tokenStream("myik", testString);
  22. //词元位置属性
  23. OffsetAttribute offset = ts.addAttribute(OffsetAttribute.class);
  24. //词文本属性
  25. CharTermAttribute term = ts.addAttribute(CharTermAttribute.class);
  26. //词文本属性
  27. TypeAttribute type = ts.addAttribute(TypeAttribute.class);
  28. ts.reset();
  29. while (ts.incrementToken()){
  30. resultsMap.put("获得分词", term.toString());
  31. for (Object obj : resultsMap.entrySet()) {
  32. Entry entry = (Entry) obj;
  33. String key = (String) entry.getKey();
  34. String value = (String) entry.getValue();
  35. System.out.println(key + ":" + value);
  36. }
  37. //System.out.println(resultsMap);
  38. // System.out.println(offset.startOffset() + " - " + offset.endOffset() + " : " + term.toString() + " | " + type.type());
  39. }
  40. ts.end();
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. } finally{
  44. if (ts != null){
  45. try {
  46. ts.close();
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. }
  52. return resultsMap;
  53. }
  54. //实现只能分词2
  55. public static void testik02(){
  56. }

分词结果:

获得分词:张柏芝
获得分词:士
获得分词:蛋糕
获得分词:房
获得分词:zhang
获得分词:s
获得分词:cake
获得分词:shop
获得分词:网友
获得分词:们
获得分词:hold
获得分词:不
获得分词:住了
获得分词:宋祖英
获得分词:语
获得分词:培训班
获得分词:周渝民
获得分词:政
获得分词:服务中心
获得分词:容祖儿
获得分词:童
获得分词:医院
获得分词:吴奇隆
获得分词:胸
获得分词:医院
获得分词:苏永康
获得分词:复
获得分词:中心
获得分词:梁朝伟
获得分词:哥
获得分词:专卖
获得分词:陈冠希
获得分词:望
获得分词:小学
获得分词:吴彦祖
获得分词:传
获得分词:中医
获得分词:坊
获得分词:林
获得分词:书
获得分词:豪华酒店

这样分词不是很智能,分词需要我们自己设置。

存在的问题 还需要定义歧义字典。但是ik不支持歧义字典

 

转载于:https://www.cnblogs.com/zhanggl/p/4773036.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/966585
推荐阅读
相关标签
  

闽ICP备14008679号