IKAnalyzer 独立使用 配置扩展词典
有三点要注意(要不然扩展词典始终不生效):
- 后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件。如果不确定什么是 无BOM的UTF-8编码,最简单的方式就是 用Notepad++编辑器打开,Encoding->选择 Encoding in UTF-8 without BOM,然后保存。
- 项目preferences 里 编码选择 utf8。
- 词典和IKAnalyzer.cfg.xml配置文件的路径问题。IKAnalyzer.cfg.xml必须在src根目录下。词典可以任意放,但是在IKAnalyzer.cfg.xml里要配置对。如下:我的两个词典文件my.dic 和 mine.dic 放在src下的com.org.config包下,注意com前面一定不要加/,否则是绝对路径找不到。
<?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">com/org/config/my.dic;com/org/config/mine.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry
key="ext_stopwords">/com/org/config/stopword.dic</entry>
</properties>
package com.org; import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme; public class IKAnalyzerTest {
public static void main(String[] args) {
String str = "最希望从企业得到的是独家的内容或销售信息,获得打折或促销信息等;最不希望企业进行消息或广告轰炸及访问用户的个人信息等。这值得使用社会化媒体的企业研究"; IKAnalysis(str);
} 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(); }
}
获得 , 打折 , 或 , 促销信息 , 等 , 最不 , 希望 , 企业 , 进行 , 消息 , 或 , 广告 ,
轰炸 , 及 , 访问 , 用户 , 的 , 个人信息 , 等 , 这 , 值得 , 使用 , 社会化媒体 , 的 ,
企业研究 ,
以下是proj的目录结构。
附加:手动添加相关词库
public static void main(String[] args) throws IOException {
String s = "中文分词工具包";
Configuration cfg = DefualtConfig.getInstance(); //加载词库
cfg.setUseSmart(true); //设置智能分词
Dictionary.initial(cfg);
Dictionary dictionary = Dictionary.getSingleton();
// List<String> words = new ArrayList<String>();
// words.add("基础班");
// words.add("高级会计实务");
// dictionary.addWords(words); //自动添加自定义词
System.out.println(cfg.getMainDictionary()); // 系统默认词库
System.out.println(cfg.getQuantifierDicionary());
Hit hit = dictionary.matchInMainDict("基础班".toCharArray());
System.out.println(hit.isMatch());
System.out.println(queryWords(s));
}
/**
* IK 分词
*
* @param query
* @return
* @throws IOException
*/
public static List<String> queryWords(String query) throws IOException {
List<String> list = new ArrayList<String>();
StringReader input = new StringReader(query.trim());
IKSegmenter ikSeg = new IKSegmenter(input, true);// true 用智能分词 ,false细粒度
for (Lexeme lexeme = ikSeg.next(); lexeme != null; lexeme = ikSeg.next()) {
list.add(lexeme.getLexemeText());
}
return list;
}
IKAnalyzer 独立使用 配置扩展词典的更多相关文章
- IK-Analyzer(5.3.1)动态配置自定义词典
参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...
- IKAnalyzer使用停用词词典进行分词
@Test // 測试分词的效果,以及停用词典是否起作用 public void test() throws IOException { String text = "老爹我们都爱您.&qu ...
- Sourcetree报错: 您没有已经配置扩展集成设置的远端
一.错误提示 您没有已经配置扩展集成设置的远端; ... 二.解决 配置 Legacy Account Settings 即可:
- centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides "*/vim" 第十节课
centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides "*/vim" 第十节课 你不能保证可逆化操 ...
- 使用 Sinamics S120 驱动脚本配置扩展报文
为了传输故障代码.电流.温度等信息.通常需要使用扩展报文的方式来发送这些信息.在驱动数量较少的情况下,可以进行手动配置. 如果驱动数量很多,可以使用脚本script的方式来配置扩展报文. 驱动编号 注 ...
- 五十八.Kibana使用 、 Logstash配置扩展插件
1.导入数据 批量导入数据并查看 1.1 导入数据 1) 使用POST方式批量导入数据,数据格式为json,url 编码使用data-binary导入含有index配置的json文件 ]# ...
- Cisco基础(四):配置标准ACL、配置扩展ACL、配置标准命名ACL、配置扩展命名ACL
一.配置标准ACL 目标: 络调通后,保证网络是通畅的.同时也很可能出现未经授权的非法访问.企业网络既要解决连连通的问题,还要解决网络安全的问题. 配置标准ACL实现拒绝PC1(IP地址为192.16 ...
- Lucene基于IKAnalyzer配置的词典扩充
在web项目的src目录下创建IKAnalyzer.cfg.xml文件,内容如下 <?xml version="1.0" encoding="UTF-8" ...
- 用pecl/pear独立编译PHP扩展 vs. 把扩展编译到PHP内核中
将扩展编译到php内部的方式会提高php运行扩展的效率,但是每次需要新添加扩展时都需要把php以及之前添加的所有扩展重新编译一边,非常麻烦. 独立编译扩展,php外部调用扩展的方式虽然会牺牲一点点的性 ...
随机推荐
- arduino空调遥控器
参考:http://www.arduino.cn/thread-3487-1-1.html http://www.arduino.cn/thread-3618-1-1.html 注意1:有金属外壳的一 ...
- AngularJS标准Web业务流程开发框架—1.AngularJS模块以及启动分析
前言: AngularJS中提到模块是自定义的模块标准,提到这不得不说AngularJS是框架中的老大哥,思想相当的前卫..在这框架满天横行的时代,AngularJS有些思想至今未被超越,当然仁者见仁 ...
- java程序设计基本概念 jvm
JVM (1)对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中.对于equals相等的字符串 ...
- web.xml 404 500 配置
web.xml <error-page> <error-code>404</error-code> <location>/error404.html&l ...
- php一些方法说明
var_dump():判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值.数组将递归展开值,通过缩进显 ...
- (欧拉公式 很水) Coprimes -- sgu -- 1002
链接: http://vj.acmclub.cn/contest/view.action?cid=168#problem/B Coprimes 时限:250MS 内存:4096KB 6 ...
- MFC中添加新的对话框
MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Cla ...
- [A,D]=solverAdini(node,elem,bdEdge,h1,h2)
>> [A,D]=solverAdini(node,elem,bdEdge,h1,h2) A = (1,1) 14.5000 (2,1) 11.0000 (3,1) 11.5000 (4, ...
- Chrome For EBS
https://chrome.google.com/webstore/detail/oracle-ebs-r12-enablement/ekkagabmggbmpmncofhgkfigmeldifnc ...
- C#使用oledb操作excel文件的方法
本文实例讲述了C#使用oledb操作excel文件的方法.分享给大家供大家参考.具体分析如下: 不管什么编程语言都会提供操作Excel文件的方式,C#操作Excel主要有以下几种方式: 1.Excel ...