IKAnalyzer分词

     自定义分词:

          package test;


import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;


import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.junit.Test;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import org.wltea.analyzer.lucene.IKAnalyzer;


public class IKTest {


@Test
public void testIKAnalyzer() throws Exception {


String keyWord = "2012年欧洲四国赛中国春晓油田中国航母日本中国钓鱼岛";


IKAnalyzer analyzer = new IKAnalyzer(true);


// 打印分词结果
printAnalysisResult(analyzer, keyWord);


}
public static void main(String[] args) {
String str = "最希望从企业得到的是独家的内容或销售信息,获得打折或促销信息等;最不希望企业进行消息或广告轰炸及访问用户的个人信息等。这值得使用社会化媒体             的企业研究";
IKAnalysis(str);
}
/**
* 打印出给定分词器的分词结果

* @param analyzer
*            分词器
* @param keyWord
*            关键词
* @throws Exception
*/
private void printAnalysisResult(Analyzer analyzer, String keyWord)
throws Exception {
System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName());
TokenStream tokenStream = analyzer.tokenStream("content",
new StringReader(keyWord));
tokenStream.addAttribute(CharTermAttribute.class);
while (tokenStream.incrementToken()) {
CharTermAttribute charTermAttribute = tokenStream
.getAttribute(CharTermAttribute.class);
System.out.println(charTermAttribute + "--");
}
}


public static String IKAnalysis(String str) {
StringBuffer sb = new StringBuffer();
try {
// InputStream in = new FileInputStream(str);//
byte[] bt = str.getBytes();// str
InputStream ip = new ByteArrayInputStream(bt);
Reader read = new InputStreamReader(ip);
IKSegmenter iks = new IKSegmenter(read, true);
Lexeme t;
while ((t = iks.next()) != null) {
sb.append(t.getLexemeText() + " , ");


}
sb.delete(sb.length() - 1, sb.length());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sb.toString());
return sb.toString();


}

}

注意点:

 1、      IKAnalyzer.cfg.xml文件的内容:

         <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">mydic.dic</entry> 

<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry> 

</properties>

 

2、 自定义的词典和stopWords文件位置要放正确,简单的就是放在IKAnalyzer.cfg.xml同级目录,在classes文件夹下即可.

  后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件。如果不确定什么是  无BOM的UTF-8编码,最简单的方式就是 用Notepad++编辑器打开,Encoding->选择 Encoding in UTF-8 without BOM,然后保存。

3、用Notepad++更改词库后保存,要刷新工程才会生效。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值