Skip to content

用户自定义词典

shiyuan edited this page Sep 14, 2016 · 16 revisions

#用户自定义词典

Ansj的一个喜人的功能就是支持用户自定义词典.

词典是基于tree_split项目来的.就是一个超级简单.做过一些优化的tire树结构.它具有使用灵活.内存占用小等特点

Ansj目前支持以下的用户自定义词典的操作方式.

  • 从文件中加载词典
    • 配置文件
    • 编码路径
  • 从内存操作词典
    • 增加
    • 删除
    • 修改

从文件中加载词典/设置辞典路径

关于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);
}
}
Clone this wiki locally