-
Notifications
You must be signed in to change notification settings - Fork 2.3k
用户自定义词典
shiyuan edited this page Sep 14, 2016
·
16 revisions
#用户自定义词典
Ansj的一个喜人的功能就是支持用户自定义词典.
词典是基于tree_split项目来的.就是一个超级简单.做过一些优化的tire树结构.它具有使用灵活.内存占用小等特点
- 从文件中加载词典
- 配置文件
- 编码路径
- 从内存操作词典
- 增加
- 删除
- 修改
关于ansj分词用户自定义词典的路径设置
第一种.正规方式
简单起见,可以在项目根路径下创建library.properties,并且在library.properties中增加
#path of userLibrary
userLibrary=library/userLibrary/userLibrary.dic
ambiguityLibrary=/library/ambiguity.dic
第二种 在自定义词典未加载前可以通过代码方式来加载
MyStaticValue.userLibrary=[你的路径]
注意5.0.x以后的版本应按如下操作
第三种,调用api加载.在程序运行的任何时间都可以.动态价值
loadLibrary.loadLibrary(String path)方式加载
路径可以是具体文件也可以是一个目录 如果是一个目录.那么会扫描目录下的dic文件自动加入词典
直接看例子.这个功能其实在tree-split中就已经存在的.
说明:
1..删除只能删除用户自定义词典的词.
2.对了分词默认把大写都转换为小写了.所以添加新词的时候要求必须是小写.
package org.ansj.demo;
import java.util.List;
import org.ansj.domain.Term;
import org.ansj.library.UserDefineLibrary;
import org.ansj.splitWord.analysis.ToAnalysis;
/**
* 动态添加删除用户自定义词典!
*
* @author ansj
*
*/
public class DynamicWordDemo {
public static void main(String[] args) {
// 增加新词,中间按照'\t'隔开
UserDefineLibrary.insertWord("ansj中文分词", "userDefine", 1000);
List<Term> terms = ToAnalysis.parse("我觉得Ansj中文分词是一个不错的系统!我是王婆!");
System.out.println("增加新词例子:" + terms);
// 删除词语,只能删除.用户自定义的词典.
UserDefineLibrary.removeWord("ansj中文分词");
terms = ToAnalysis.parse("我觉得ansj中文分词是一个不错的系统!我是王婆!");
System.out.println("删除用户自定义词典例子:" + terms);
}
}