Jcseg-开发帮助文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Jcseg开源中文分词器开发帮助文档
(注: 该文档只适用于1.8.8及其以后的版本)
一. 关于jcseg:
jcseg是使用Java开发的一款开源的中文分词器, 使用mmseg算法. 分词准确率高达98.4%, 支持中文人名识别, 同义词匹配, 停止词过滤..., 详情请查看jcseg官方首页.
官方首页: https:///p/jcseg/
下载地址: https:///p/jcseg/downloads/list
Jcseg详细功能介绍: (可以略过, 方便查看新版本功能变化)
1。

目前最高版本:jcseg-1.9.2。

兼容最高版本lucene-4.x和最高版本solr-4.x
2。

mmseg四种过滤算法,分词准确率达到了98.41%。

3。

支持自定义词库。

在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类。

参考下面了解如何给jcseg添加词库/新词。

4。

(!New) 支持词库多目录加载. 配置lexicon.path中使用';'隔开多个词库目录.
5。

(!New)词库分为简体/繁体/简繁体混合词库: 可以专门适用于简体切分, 繁体切分, 简繁体混合切分, 并且可以利用下面提到的同义词实现,简繁体的相互检索, jcseg同时提供了词库两个简单的词库管理工具来进行简繁体的转换和词库的合并.
6。

中英文同义词追加/同义词匹配+ 中文词条拼音追加.词库整合了《现代汉语词典》和cc-cedict辞典中的词条,并且依据cc-cedict词典为词条标上了拼音,依据《中华同义词词典》为词条标上了同义词(尚未完成)。

更改jcseg.properties配置文档可以在分词的时候加入拼音和同义词到分词结果中。

jcseg新版词库7。

中文数字和中文分数识别,例如:"一百五十个人都来了,四十分之一的人。

"中的"一百五十"和"四十分之一"。

并且jcseg会自动将其转换为阿拉伯数字加入到分词结果中。

如:150,1/40。

8。

支持中英混合词和英中混合词的识别(维护词库可以识别任何一种组合)。

例如:B超, x射线, 卡拉ok, 奇都ktv, 哆啦a梦。

9。

更好的英文支持,电子邮件,域名,小数,分数,百分数,字母和标点组合词(例如C++, c#)的识别。

10。

自定义保留标点, 例如: 保留&, 就可以识别k&r这种复杂切分结果, 加上下面一条的功能, 可以完美的适合检索。

11。

(!New)复杂英文切分结果的二次切分: 例如QQ2013会被切分成: qq2013/ qq/ 2013,
chenxin619315@会被切分成: chenxin619315@/ chenxin/ 619315/ gmail/ com。

12。

支持阿拉伯数字/小数/中文数字基本单字单位的识别,例如2012年,1.75米,38.6℃,五折,并且折加入分词结果中。

jcseg“
会将其转换为5”
13。

智能圆角半角, 英文大小写转换。

14。

特殊字母识别:例如:Ⅰ,Ⅱ
15。

特殊数字识别:例如:①,⑩
编程思想》,畅想杯黑客技术大赛,被《,‘,“,『标16。

配对标点内容提取:例如:最好的Java书《java‘’
点标记的内容。

(1.6.8版开始支持)。

17。

智能中文人名识别。

中文人名识别正确率达94%以上。

(可以维护lex-lname.lex,lex-dname-
1.lex,lex-dname-
2.lex来提高准确率),(引入规则和词性后会达到98%以上的识别正确率)。

18。

自动中英文停止词过滤功能(需要在jcseg.properties中开启该选项,lex-stopwords.lex为停止词词库)。

19。

词库更新自动加载功能, 开启一个守护线程随时检测词库的更新并且加载。

20。

(!New)自动词性标注。

21。

jcseg.properties --- 方便自主对分词进行配置, 打造适合你的应用的分词.
二. 安装jcseg:
先到jcseg官方地址下载最新版本的jcseg: jcseg-{version}-src-jar-dict.zip, {version}表示版本号, 下同.
解压jcseg-{version}-src-jar-dict.zip到你要安装的目录即可. 例如: Linux:
/java/jcseg, WinNT: D:/jcseg
三. 配置jcseg:
jcseg词库的加载以及很多功能的开启和关闭都可以在jcseg.properties中配置.
1. 基本配置:
(1).让jcseg找到jcseg.properties配置文件:
jcseg.properties配置文件查找方式:
1). jar home路径搜索. 2). classpath中搜索. 3). user home路径搜索.
jcseg.properties配置文件查找顺序: jcseg首先会在jar home路径下搜索
jcseg.properties配置文件, 如果没有找到, 接下来会在classpath中搜索(1.8.3版中我已将一份全部为默认选项的jcseg.properties文件放入了jcseg-core-{version}.jar中), 所以也就不会出现配置文件查找不到的情况了, 另外当前版本的jcseg还支持在user home下查找
jcseg.properties文件(System.getProperty(“user.home”)来获取user home路径).
对于使用默认选项的用户来说, 就不需要这个文件了, 如果需要自主配置该文档的, 将更改后的jcseg.properties文件放在jar home即可.
当然你也可以把更改后的jcseg.properties文件重新打包到jcseg-core-{version}.jar中去, 基于需要修改的方便性, 通常放于jar home下, 来覆盖jcseg-core-{version}.jar中的默认配置.
4). 自定义配置文件查找方式: 从1.8.8版本开始jcseg支持自定义配置文件查找方式, 有利于复杂项目的配置文件的统一管理. 请看下面的Jcseg二次开发.
(2). 让jcseg找到词库:
jcseg找到jcseg.properties配置文件后, jcseg.properties中lexicon.path的值就是词库文件的绝对路径.
例如, 你的jcseg安装在D:/jcseg中, 则:
设置jcseg.properties中的lexicon.path=D:/jcseg /lexicon
此时, 词库文件的绝对路径为: lexicon.path, 即: D:/jcseg/lexicon
lexicon.path默认值为{jar.dir}/lexicon表示jar home/lexicon目录下, 建议词库和jar文件分开存放, 然后配置lexicon.path来指向词库.
注: 从jcseg 1.8.8开始, 去掉了jcseg.properties中的lexicon.dir选项. 并且支持自定义词库目录全部词库文件词条或者指定词库文件词条加载, 方便词库管理的二次开发. 请看下面的Jcseg二次开发.
提示: 词库不需要压缩到jcseg jar包中去, 也不建议这么做, 这样方便对词库进行随时的维护, 词库可以放在任何地方, 只要在jcseg.properties中配置lexicon.path来指向词库目录即可.
(3). 更多配置:
你可以更改最大化匹配长度, 关闭或者开启中文人名识别, 关闭或者开启切分同义词追加, 关闭或者开启停止词过滤功能...,
请参考下面的jcseg.properties配置项以及相关含义.
修改后, 重启jcseg相关服务即可.
2. jcseg.properties配置项以及含义: (可以先不用理会)
# jcseg function
#-正向最大化匹配数目(建议位于4-7之间)。

jcseg.maxlen=1
#-开启中文人名识别(1.7.0后, 0关闭, 1开启)。

jcseg.icnname=1
后面有两个字计划。

#-中英混合词最大中文词数,例如:A计划A“”
jcseg.mixcnlen=2
#最大的配对标点内容长度。

jcseg.pptmaxlen=15
姓氏修饰词长度,例如:老陈中的陈(通常为1)。

#-“”
maxlnadron=1
#是否自动过滤停止词(0关闭, 1开启)
jcseg.clearstopword=1
#是否自动中文数字转阿拉伯数字(0关闭, 1开启)
numtoarabic=1
#是否自动中文分数转阿拉伯分数(0关闭, 1开启)
fratoarabic=1
#-姓名成词歧义阕值(不用更改, 除非你知道你改了什么)。

jcseg.nsthreshold=1000000
#自动保留标点,用于识别负载的英文标点组合词.
jcseg.keeppunctuations=@%.&+
# about the lexicon
#-词库文件前缀(例如: lex-main.lex)。

lexicon.prefix=lex
#-词库文件后缀(例如: lex-main.lex)。

lexicon.suffix=lex
#-词库存放路径({jar.dir}/lexicon 为默认路径, 表示词库位于jar目录下的lexicon目录下) #从jcseg-1.9.2开始: 支持多目录加载词库.不同的路径使用';'隔开就可以了.
#例如: lexicon.path=/java/jcseg/lex1;/java/jcseg/lex2
lexicon.path={jar.dir}/lexicon
#-是否词库更新自动加载(1开启, 0关闭)
lexicon.autoload=1
#-词库更新轮询时间(单位: 秒)
lexicon.polltime=120
# lexicon load
#载入词库时是否载入词条的词性。

(0关闭, 1开启)
jcseg.loadpos=0
#载入词库时是否载入词条的拼音(1.7.0后, 0关闭, 1开启)。

jcseg.loadpinyin=1
#载入词库时是否载入词条的同义词(0关闭, 1开启)。

jcseg.loadsyn=1
#是否保留Jcseg不是别的字符.(1保留, 0关闭)
jcseg.keepunregword=1
#是否二次切分复杂的英文切分结果. (1开启, 0关闭)
jcseg.ensencondseg = 1
#最小二次切分长度. (建议大于1)
jcseg.stokenminlen = 2
四. 运行jcseg测试程序:
配置好后, 相信你想知道配置是否正确, 或者说想试试jcseg的分词效果:切换到jcseg安装目录, 然后运行:
java -jar jcseg-core-{version}.jar
你会看到各个配置项的当前值, 以及默认的分词效果, 和如下提示界面:
+--------jcseg chinese word segment demo-------+
|- Suggest email: chenxin619315@ |
|- Run :quit or :exit to exit. |
+-------------------------------------------------------------------+
jcseg>>
在jcseg>>提示符后输入你要分词的内容, 按enter键即可.
例如:
jcseg>> jcseg是使用java开发的一款开源中文分词组件.
分词结果:
jcseg 使用java 开发一款开源中文分词组件
Done, total:26, split:8, cost: 0.00000sec
total为总字符数, split为切分之后的词条数, cost为耗费的时间.
五. lucene分词用法:
//导入jcseg-core-{version}.jar和jcseg-analyzer-{version}.jar
/**
1.JcsegT PLEX_MODE为复杂模式:
特点:四种过滤算法。

*/
/**
2.JcsegT askConfig.SIMPLE_MODE为简易模式
特点:只使用了最大化过滤算法,其他的同复杂模式。

*/
Analyzer analyzer =new JcsegAnalyzer4X(JcsegT PLEX_MODE);
//非必须(用于修改默认配置): 获取分词任务配置实例
JcsegAnalyzer4X jcseg = (JcsegAnalyzer4X) analyzer;
JcsegT askConfig config = jcseg.getTaskConfig();
//追加同义词到分词结果中, 需要在jcseg.properties中配置jcseg.loadsyn=1
config.setAppendCJKSyn(true);
//追加拼音到分词结果中, 需要在jcseg.properties中配置jcseg.loadpinyin=1 config.setAppendCJKPinyin();
//更多配置, 请查看com.webssky.jcseg.core.JcsegTaskConfig类
接下来把analyzer给lucene即可.
六. solr分词用法:
1. 从jcseg附件解压目录中将jcseg-core-{version}.jar和jcseg-solr-{version}.jar复制到solr的类库目录中.
2. 在solr的scheme.xml加入如下两种配置之一:
<!----复杂模式分词: -->
<fieldtype name="textComplex"class="solr.T extField">
<analyzer>
<tokenizer class="org.lionsoul.jcseg.solr.JcsegT okenizerFactory" mode="complex"/>
</analyzer>
</fieldtype>
<!----简易模式分词: -->
<fieldtype name="textSimple"class="solr.T extField">
<analyzer>
<tokenizer class="org.lionsoul.jcseg.solr.JcsegT okenizerFactory" mode="simple"/>
</analyzer>
</fieldtype>
如果需要做类似上面lucene的配置, 需要更改
org.lionsoul.jcseg.solr.JcsegTokenizerFactory分词工厂.
七. Jcseg二次开发(Jcseg API):
你需要一个JcsegTaskConfig配置实例, 一个ADictionary词库实例和一个ASegment分词实例来完成分词工作, 三个实例的创建方法如下:
(完整的例子可以查看org.lionsoul.jcseg.test.JcsegTest.java)
1. 创建JcsegTaskConfig分词配置实例:
(1). 创建从默认的jcseg.properties中初始化的JcsegTaskConfig对象:
//该方法会自动查找jcseg.properties配置文件
//然后依据jcseg.properties中的选项初始化JcsegTaskConfig.
JcsegTaskConfig config = new JcsegTaskConfig();
//或者使用如下方式(指定自定义配置文件路径为null).
JcsegTaskConfig config = new JcsegTaskConfig(null);
(2). 创建从指定的jcseg.properties中初始化的JcsegTaskConfig对象:
//依据proFile指定的配置文件创建JcsegTaskConfig.
JcsegTaskConfig config =
new JcsegTaskConfig("/java/jcseg/jcseg.properties");
(3). 从给定的jcseg.properties配置文件中重置JcsegTaskConfig:
//从指定的jcseg.properties配置文件中重置JcsegTaskConfig选项
config.resetFromPropertyFile("/java/jcseg/jcseg.properties");
2. 创建ADictionary分词词库实例:
使用org.lionsoul.jcseg.core.DictionaryFactory创建ADictionary实例:
注: jcseg默认ADictionary实现为: org.lionsoul.jcseg.Dictionary, 以下方法都是创建该默认实现的实例.
参数说明:
config: 分词配置对象, 里面有词库加载所需要的信息.
sync: 是否创建同步词库. true表示创建同步词库,false表示创建非同步词库.
注: 通常都是创建非同步词库(比同步词库快),如果在jcseg运行的过程中,有程序会调用jcseg的词库API来增加或者删除词库, 这个情况下你就需要创建同步词库, 例如: 如果开启了jcseg的词库更新自动加载功能, 就需要创建同步词库(通过DictionaryFactory来创建, jcseg自己处理好了).
为了兼容或者说方便扩展jcseg不是直接new一个ADictionary(其实现类)实例, 而是通过DictionaryFactory来创建词库对象.
(1). 依据给定的JcsegTaskConfig创建ADictionary:
//config为上面创建的JcsegTaskConfig对象.
//如果给定的JcsegTaskConfig里面的词库路径信息正确(是从
jcseg.properties中初始化的就对了),
//Adictionary会依据JcsegTaskConfig里面的词库信息加载全部有效的词库.
//并且该方法会依据config.isAutoload()来决定词库的同步性还是非同步性.
//config.isAutoload()为true就创建同步词库, 反之就创建非同步词库.
//config.isAutoload()对应jcseg.properties中的lexicon.autoload ADictionary dic = DictionaryFactory
.createDefaultDictionary(config);
(2). 依据给定的JcsegTaskConfig和sync创建ADictionary:
//创建一个非同步的ADictioanry.
ADictionary dic = DictionaryFactory
.createDefaultDictionary(config, false);
//创建一个同步的ADictioanry.
ADictionary dic = DictionaryFactory
.createDefaultDictionary(config, true);
//依据config.isAutoload()来决定同步性
ADictionary dic = DictionaryFactory
.createDefaultDictionary(config, config.isAutoload());
(3). ADictionary词库加载API:
//指定ADictionary加载给定目录下的所有词库文件的词条.
//config.getLexiconPath为词库文件存放有效目录.
dic.loadFromLexiconDirectory(config.getLexiconPath());
//指定ADictionary加载给定词库的词条.
//config为上面创建的JcsegTaskConfig实例.
dic.loadFromLexiconFile(config, "/java/lex-main.lex");
注: 加载给定目录下的所有词库文件词条或者加载给定词库文件的词条的API为Jcseg词库更新自动加载提供了很大的方便性.
3. 创建ASegment或者ISegment分词实例:
Jcseg的主分词类程序在org.lionsoul.jcseg.ASegment抽象类中得到具体实现, 该类实现了Jcseg主API接口org.lionsoul.jcseg.core.ISegment.
ComplexSeg继承ASegment实现了复杂模式分词, SimpleSeg继承了ASegment实现了简易模式分词.
参数说明:
config: 分词配置实例, 参考上面的创建JcsegTaskConfig.
dic:词库实例, 参考上面的创建ADictionary.
Org.lionsoul.jcseg.test.JcsegTest有详细的测试程序.
常用创建ISegment或者ASegment实例方法:
(1). 不带Input(构造方法一):
//创建JcsegTaskConfig分词任务实例
//即从jcseg.properties配置文件中初始化的配置
JcsegTaskConfig config = new JcsegTaskConfig();
//创建默认词库(即: com.webssky.jcseg.Dictionary对象)
//并且依据给定的JcsegTaskConfig配置实例自主完成词库的加载
ADictionary dic = DictionaryFactory
.createDefaultDictionary(config);
//依据给定的ADictionary和JcsegTaskConfig来创建ISegment
//通常使用SegmentFactory#createJcseg来创建ISegment对象
//将config和dic组成一个Object数组给SegmentFactory.createJcseg方法
//PLEX_MODE表示创建ComplexSeg复杂ISegment分词对象
//JcsegTaskConfig.SIMPLE_MODE表示创建SimpleSeg简易Isegmengt分词对象.
ASegment seg = SegmentFactory
.createJcseg(PLEX_MODE,
new Object[]{config, dic});
//设置要分词的内容
String str = "研究生命起源。

";
seg.reset(new StringReader(str));
//获取分词结果
IWord word = null;
while ( (word = seg.next()) != null ) {
System.out.println(word.getValue());
}
可以反复利用创建的ISegment对象, 通过ISegment.reset(java.io.Reader)来重置分词内容即可.
(2). 带input: 也就是第二个构造方法, 和第一个的不同点在于, 同时把要分词内容的流对象也传递进去了:
//创建JcsegTaskConfig分词任务实例
//即从jcseg.properties配置文件中初始化的配置
JcsegTaskConfig config = new JcsegTaskConfig();
//创建默认词库(即: com.webssky.jcseg.Dictionary对象)
ADictionary dic = DictionaryFactory.createDefaultDictionary();
//依据JcsegTaskConfig配置中的信息加载全部jcseg词库.
dic.loadFromLexiconDirectory(config, config.getLexiconPath());
//要被分词的文本
String str = "研究生命起源。

";
//依据给定的分词流对象, ADictionary和JcsegTaskConfig来创建ISegment
//通常使用SegmentFactory来创建ISegment对象
//将config和dic组成一个Object数组给SegmentFactory.createJcseg方法
//PLEX_MODE表示创建ComplexSeg复杂ISegment分词对象
//JcsegTaskConfig.SIMPLE_MODE表示创建SimpleSeg简易Isegmengt分词对象.
ASegment seg = SegmentFactory
.createJcseg(PLEX_MODE,
new Object[]{new StringReader(str), config, dic});
//获取分词结果
IWord word = null;
while ( (word = seg.next()) != null ) {
System.out.println(word.getValue());
}
此处同样可以反复利用创建的ISegment对象, 通过
ISegment.reset(java.io.Reader)来重新设置分词内容即可.
更多例子请参考jcseg分词测试程序: org.lionsoul.jcseg.test.JcsegTest类源码
注意: 通过此方法创建的ISegment对象是非线程安全的.
jcseg目前创建的分词实例都是非线程安全的, 但是这并不影响你的使用, 不同的线程创建不同的ISegment分词对象即可, 同时共用词库实例(lucene和solr内部接口就是这样的). 如果对一个ISegment对象多线程调用就不能保证分词的顺序, 要实现多线程调用一个ISegment分词对象还需要做一个中间存储过程.
如果你想实现多线程也可以:
你可以把要分词的流拆分下, 然后创建多个ISegment对象在不同的线程下工作, 每个ISegment负责对一个拆分得到的流进行切分. 这多个ISegment分词对象共用同一个词库.
jcseg后续会自带这种功能, 目前需要开发者自己开发.
Jcseg官网中有一个issule讨论到了这个问题:
https:///p/jcseg/issues/detail?id=9#c3
八. jcseg词库管理:
因为文档可能会更改, 请查看jcseg的Wiki文档: google code一向受到阻碍, 打开有时候很慢, 耐心点吧.
1.jcseg词库结构: https:///p/jcseg/wiki/JcsegLexicon
2.给jcseg添加新词库或者新词条:
https:///p/jcseg/wiki/WikiJcseg
3.jcseg词库类别以及说明:
https:///p/jcseg/wiki/JcsegLexiconType
注意: 当你更新了词库后, 如果你需要jcseg马上响应你对词库的更改, 你需要重启jcseg相关服务, 也就是让jcseg重新加载词库.
当然, jcseg提供了API来操作内存中的词库, 很多网友问道, 更改了jcseg的词库后, 怎么让jcseg立即响应更改来使用更新后的词库, 这个需要你自己调用jcseg的API来完成相关服务, 当你更改词库后, 调用你的程序来重新加载词库即可.
1.8.8开始jcseg支持词库更新自动加载, 请往下看^_^.
Jcseg词库API:
jcseg词库API定义在org.lionsoul.jcseg.ADictionary抽象类中. 提供了方法来添加/编辑/删除/查找/批量加载词条.
1. jcseg词库类别以及关键字:
jcseg对词库进行了分类, 每个词库文件的第一行都有一个关键字用于对词库分类, 请不要删除了(删除了就是默认类别:CJK_WORDS).
以下是词库类别的以及含义说明:
CJK_WORDS
#含义: 普通CJK词库, 中文,日文,韩文普通词库.
CJK_UNITS
#含义: CJK字符单位词库, 例如: 斤, 公里
EC_MIXED_WORD
#含义: 英文字符和CJK字符混合词库, 例如: B超, x射线
CE_MIXED_WORD
#含义: CJK字符和英文字符混合词库, 例如: 卡拉ok, 漂亮mm
CN_LNAME
#含义: 中文姓氏词库, 例如: 陈, 阳, 罗
CN_SNAME
#含义: 中文姓名"单字姓名"名词库, 例如: 张三中的"三", 李四中的"四"
CN_DNAME_1
#含义: 中文双子姓名, 首字词库, 例如: 李大头中的"大"
CN_DNAME_2
#含义: 中文双字姓名中的, 尾字词库, 例如: 李大头中的"头"
CN_LNAME_ADORN
#含义: 中文姓氏修饰词, 例如: 老陈中的"老", 小李中的"小", jcseg会自动识别"老陈", "小陈"这类词
EN_PUN_WORDS
#含义: 英文和标点组成词, 例如: c++, c#, g++
STOP_WORD
#含义: 所有停止词词库
2. 获取正在工作的ADictionary实例:
通常用的是org.lionsoul.jcseg.Dictionary默认词库实现. (意味着你也可以使用自己的词库实现, 继承ADictionary即可)
给lucene的JcsegAnalyzer4X和给solr的JcsegT okenizerFactory都可以通过对应对象的getDict()方法来获取正在使用的词库实例. 设获取的词库对象为dic.
3. 添加新词条(注: 此添加只是在内存中, 并不会应用更改到词库文件中):
t : 词库的类别
key: 词条
type: 类别, 使用IWord.T_CJK_WORD即可
添加新词条研究到CJK主词库中:
例如: ””
研究, Iword.T_CJK_WORD);
dic.add(ILexicon.CJK_WORDS, “”
4. 删除给定词条:
t : 词库类别
key: 要被删除的词条
删除停止词词库中的我们:
例如: ””
我们);
dic.remove(ILexicon.STOP_WORD, “”
5. 查询词条(包括给词条添加同义词和拼音)
t : 词库类别
key: 要查找的词条:
返回值: 成功返回IWord对象, 失败返回null
主词库中查找研究:
例如: 在CJK””
研究);
IWord w = dic.get(ILexicon.CJK_WORDS, “”
6 编辑给定的词条(添加同义词, 修改拼音, 添加词性, 修改语素自由度等等)
通过上步返回的w对象再调用IWord的API就可以实现对应的功能了:
研发);
(1).添加同义词: w.addSyn(“”
(2).添加词性: w.addPartSpeech(“n”);
(3).设置词条拼音:w.setPinyin(“yan fa”);
更多方法请参考org.lionsoul.jcseg.core.IWord接口或者org.lionsoul.jcseg.Word类
7. 依据给定的config和词库目录加载该目录下所有词库词条:
dic.loadFromLexiconDirectory(config, config.getLexiconPath());
注: 之所以需要config是因为config里面有来此jcseg.properties中的词库文件的前缀和后缀还有词库路径等信息.
8. 依据给定的config和词库文件加载该词库文件中的词条:
dic.loadFromLexiconFile(config, "/java/lex-main.lex");
注: 给定的词库必须为jcseg标准词库, 请查看jcseg词库结构:
https:///p/jcseg/wiki/JcsegLexicon.
New!!!
如果你是直接更改了词库文件或者新增了词库, 如何让jcseg重新加载更改的词库呢?
1. 让jcseg自动轮询检测词库更新并且加载:
(1). 配置jcseg.properties中的lexicon.autoload=1
(2). 配置jcseg.properties中的lexicon.polltime=60 #为你预订的轮询时间(默认60秒)
(3). 告诉jcseg你需要重新加载的词库:
词库目录下有个lex-autoload.todo文件, 使用文本编辑器打开, 将你需要重新加载的词库名称一行一个写入即可, jcseg会自动按照lex-autoload.todo最后修改时间来判断是否重新载入给定的词库文件. 完成lex-autoload.todo里面的词库加载后, jcseg会自动清空里面的内容, 你也可以通过查看里面的内容来断定jcseg是否完成了给定词库的加载工作.
例如: 我给lex-main.lex和lex-unitx.lex加入了新词条.
使用文本编辑器打开lex-autoload.todo文件, 把lex-main.lex做为该文件的第一行, 把lex-units.lex作为第二行, 保存即可, 一段时间后(由jcseg.properties中的lexicon.polltime决定)指定的词库会被重新加载, 加载完后该文件会被清空.
2. 利用jcseg词库API:
注: 这种情况下你需要确保jcseg的词库对象为同步的. 即, 通过:
ADictionary dic = DictionaryFactory
.createDefaultDictionary(config, true);
来创建同步词库.
相信ADictioanry.loadFromLexiconDirectory 和
ADictionary.loadFromLexiconFile 已经给定了你足够的信息来加载词库.
开发者只需要写一个程序适当的调用这个两个API即可, 至于通过何种方式来调用你的程序, 那取决于你的系统. 例如: 你可以做成一个网页来调用你的程序, 适当的时候访问指定网页来完成该工作.
九. 词库管理工具:
从jcseg 1.9.1开始, 里面自带了两个词库管理工具:
1. 简繁体相互转换:
Usage: java -jar jcseg-dicst.jar {tpy} {src} {dst}
{tpy}: 表示类型, 0 – 简体转换为繁体, 1 – 繁体转简体
{src}: 来源词库目录, 如果{tpy}为0则表示简体词库路径, 反之表示繁体词库路径.
{dst}: 结果存放目录, 表示将转换后的结果存放到指定目录.
例如: 将/home/chenxin/sim下的简体jcseg词库(格式: lex-xxxx.lex)转换为繁体词库存放到/home/chenxin/tra下:
java -jar jcseg-dicst.jar 0 /home/chenxin/sim /home/chenxin/tra
2. 词库合并工具:
Usage: java -jar jcseg-dicmerge.jar {dstdir} {srcdir1} {srcdir2} …
{dstdir}: 合并之后的词库存放目录
{srcdir1}: 来源词库1目录
{srcdir2}: 来源词库2目录
...
{srcdirn}: 来源词库n目录
例如: 将1中得到的简体词库和繁体词库合并成一份词库放到/home/chenxin/mix中:
java -jar jcseg-dicmerge.jar/home/chenxin/mix/home/chenxin/sim
/home/chenxin/tra
词库合并会将全部来源词库中的相同词库合并, 并且将相同词库中的词条合并, 同词条“”
的词性和同义词合并. 来源词库可以只有一个, 那么就可以将词库去重, 并且按照自然顺序排序.
就是用转换工具从简体转换得到一份繁体词从Jcseg-1.9.1开始的简繁体混合词库, ””
库, 然后再将简体和繁体合并得到的.
十. 更多文档:
1. Wiki文档:
https:///p/jcseg/w/list
2.jcseg.properties文档说明:
https:///p/jcseg/wiki/JcsegPropertiesFile
3.jcseg词库类别以及含义:
https:///p/jcseg/wiki/JcsegLexiconType
十一. 联系作者:
陈鑫网名: 狮子的魂
1. 作者信息: –
2. 电子邮件: chenxin619315@
十二. 更多开源项目:
语言实现的高性能开源中文分词器friso
1. C –
/p/friso
中文分词扩展robbe
2. 基于friso实现的开源php –
/p/robbe
开源跨平台多媒体教学软件jteach
3. –
/p/jteach。

相关文档
最新文档