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

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

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

 

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

Analyzer cannot be resolved to a type
	TokenStream cannot be resolved to a type
	OffsetAttribute cannot be resolved to a type
	OffsetAttribute cannot be resolved to a type
	CharTermAttribute cannot be resolved to a type
	CharTermAttribute cannot be resolved to a type
	TypeAttribute cannot be resolved to a type
	TypeAttribute cannot be resolved to a type

 解决办法:

在项目project -->clean 下即可

自定义分词规则步骤:

里面的例子:

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
public static void main(String[] args) {
		String testString = "张柏芝士蛋糕房 ZHANG'S CAKE SHOP,网友们Hold不住了:宋祖英语培训班、周渝民政服务中心、容祖儿童医院、吴奇隆胸医院、苏永康复中心、梁朝伟哥专卖、陈冠希望小学、吴彦祖传中医坊、林书豪华酒店";
		iktest1(testString);
	}
	
	// 实现普通分词
	public  static Map<String, Object>  iktest1(String testString){
		Map<String, Object> resultsMap = new HashMap<String, Object>();
		Analyzer ikAnalyzer = new IKAnalyzer(true);
		  TokenStream ts = null;
		  try {
			   ts = ikAnalyzer.tokenStream("myik", testString);
			  //词元位置属性
			  OffsetAttribute offset = ts.addAttribute(OffsetAttribute.class);
			  //词文本属性
			  CharTermAttribute term = ts.addAttribute(CharTermAttribute.class);
			  //词文本属性
			  TypeAttribute type = ts.addAttribute(TypeAttribute.class);
			  ts.reset();
				while (ts.incrementToken()){
					resultsMap.put("获得分词", term.toString());
					for (Object obj : resultsMap.entrySet()) {
			            Entry entry = (Entry) obj;
			            String key = (String) entry.getKey();
			            String value = (String) entry.getValue();
			            System.out.println(key + ":" + value);
			        }
					//System.out.println(resultsMap);
					//  System.out.println(offset.startOffset() + " - " + offset.endOffset() + " : " + term.toString() + " | " + type.type());
				}
			  ts.end();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			if (ts != null){
				try {
					ts.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		  return resultsMap;
	}
	
	//实现只能分词2
	public static void testik02(){
		
	}

分词结果:

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

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

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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值