如何使用带词典的asp中文分词词和自定义带词典的asp中文分词词词典

博客访问: 175913
博文数量: 67
博客积分: 2611
博客等级: 少校
技术积分: 675
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
CRF简介Conditional&Random&Field:条件随机场,一种机器学习技术(模型)CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有多种应用场景,例如:分词(标注字的词位信息,由字构词)词性标注(标注分词的词性,例如:名词,动词,助词)命名实体识别(识别人名,地名,机构名,商品名等具有一定内在规律的实体名词)本文主要描述如何使用CRF技术来进行中文分词。CRF&VS 词典统计分词基于词典的分词过度依赖词典和规则库,因此对于歧义词和未登录词的识别能力较低;其优点是速度快,效率高CRF代表了新一代的机器学习技术分词,其基本思路是对汉字进行标注即由字构词(组词),不仅考虑了文字词语出现的频率信息,同时考虑上下文语境,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果;其不足之处是训练周期较长,运营时计算量较大,性能不如词典妇分词CRF VS HMM,MEMM首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。CRF分词原理1. CRF把分词当做字的词位分类问题,通常定义字的词位信息如下:词首,常用B表示词中,常用M表示词尾,常用E表示单子词,常用S表示2. CRF分词的过程就是对词位标注后,将B和E之间的字,以及S单字构成分词3. CRF分词实例:原始例句:我爱北京天安门CRF标注后:我/S 爱/S 北/B 京/E 天/B 安/M 门/E分词结果:我/爱/北京/天安门CRF分词工具包上面介绍了CRF技术思想以及如何用于分词,下面将介绍如何在实际开发中使用CRF进行分词工作。目前常见的CRF工具包有pocket crf, flexcrf 车crf++,目前网上也有一些它们3者之间的对比报告,个人感觉crf++在易用性,稳定性和准确性等综合方面的表现最好,同时在公司的项目开发中也一直在使用,因此下面将概述一下crf++的使用方法(具体细节可以到crf++官方主页去查阅,http://crfpp.sourceforge.net/)1.安装编译器要求:C++编译器(gcc 3.0或更高)命令:% ./configure% make% su# make install注:只有拥有root帐号的用户才能成功安装。2.使用2.1训练和测试文件的格式训练和测试文件必须包含多个tokens,每个token包含多个列。token的定义可根据具体的任务,如词、词性等。每个token必须写在一行,且各列之间用空格或制表格间隔。一个token的序列可构成一个sentence,sentence之间用一个空行间隔。最后一列是CRF用于训练的正确的标注形式。例如:iphone ASCII S是 CN S一 CN S& && 当前token款 CN S不 CN B错 CN E的 CN S手 CN B机 CN E, PUNC S还 CN S能 CN S听 CN B歌 CN E。PUCN S我上面的例子每个token包含3列,分别为字本身、字类型(英文数字,汉字,标点等)和词位标记。注意:如果每一个token的列数不一致,系统将不能正确运行。2.2准备特征模板使用CRF++的用户必须自己确定特征模板。1)基本模板和宏模板文件中的每一行代表一个template。每一个template中,专门的宏%x[row,col]用于确定输入数据中的一个token。row用于确定与当前的token的相对行数。col用于确定绝对行数。如已知下面的输入数据:iphone ASCII S是 CN S一 CN S& && 当前token款 CN S不 CN B错 CN E的 CN S手 CN B机 CN E特征模板形式为:# UnigramU00:%x[-2,0]U01:%x[-1,0]U02:%x[0,0]U03:%x[1,0]U04:%x[2,0]U05:%x[-1,0]/%x[0,0]U06:%x[0,0]/%x[1,0]U07:%x[-1,0]/%x[1,0]U08:%x[0,1]U09:%x[-1,1]/%x[0,1]# BigramB2)模板类型有两种模板类型,它们可由template的第一个字符确定。第一种是Unigram template:第一个字符是U这是用于描述unigram feature的模板。当你给出一个模板"U02:%x[0,0]",CRF会自动的生成一个特征函数集合(func1 ... funcN),如:func1 = if (output = B and feature="U02:一") return 1 else return 0func2 = if (output = M and feature="U02:一") return 1 else return 0func3 = if (output = E and feature="U02:一") return 1& else return 0func4 = if (output = S and feature="U02:一") return 1& else return 0...funcX = if (output = B and feature="U02:的") return 1& else return 0funcY = if (output = S and feature="U02:的") return 1& else return 0...一个模型生成的特征函数的个数总数为L*N,其中L是输出的类别数,N是根据给定的template扩展出的unique string的数目。第二种类型Bigram template:第一个字符是B这个模板用于描述bigram features。使用这个模板,系统将自动产生当前输出token与前一个输出token(bigram)的组合。产生的可区分的特征的总数是 L*L*N,其中L是输出类别数,N是这个模板产生的unique features数。当类别数很大的时候,这种类型会产生许多可区分的特征,这将会导致训练和测试的效率都很低下。3)使用标识符区分相对位置如果用户需要区分token的相对位置时,可以使用标识符。比如在下面的例子中,宏"%x[-2,0]"和"%x[1,0]"都代表“北”,但是它们又是不同的“北“。北 CN B京 CN E的 CN S& && 当前token北 CN S部 CN S为了区分它们,可以在模型中加入一个唯一的标识符(U00: 或 U03:),即:U00:%x[-2,0]U03:%x[1,0]在这样的条件下,两种模型将被认为是不同的,因为他们将被扩展为”U00:北“和”U03:北”。只要你喜欢,你可以使用任何标识符,但是使用数字序号区分更很有用,因为它们只需简单的与特征数相对应。3.训练(编码)使用crf_learn 命令:% crf_learn template_file train_file model_file其中,template_file和train_file需由使用者事先准备好。crf_learn将生成训练后的模型并存放在model_file中。一般的,crf_learn将在STDOUT上输出下面的信息。还会输出其他的和LBFGS迭代相关的信息。% crf_learn template_file train_file model_fileCRF++: Yet Another CRF Tool KitCopyright (C) 2005 Taku Kudo, All rights reserved.reading training data:Done! 0.32 sNumber of sentences:&&&&&&&&& 77Number of features:&&&&&&&&&& 32856Freq:&&&&&&&&&&&&&&&&&&&&&&&& 1eta:&&&&&&&&&&&&&&&&&&&&&&&&& 0.0001C(sigma^2):&&&&&&&&&&&&&&&&&& 10iter=0 terr=0. serr=1 obj= diff=1iter=1 terr=0. serr=0. obj= diff=0.iter=2 terr=0. serr=0. obj=626.9159973 diff=0.其中:iter:迭代次数terr:和tags相关的错误率(错误的tag数/所有的tag数)serr:与sentence相关的错误率(错误的sentence数/所有的sentence数)obj:当前对象的值。当这个值收敛到一个确定的值是,CRF模型将停止迭代diff:与上一个对象值之间的相对差有两个主要的参数用于控制训练条件:-c float:使用这个选项,你可以改变CRF的hyper-parameter。当取一个极大的C值,CRF将可能对训练数据产生过拟合(overfitting)现象。这个参数将会调节overfitting和underfitting之间的平衡。结果将会对参数带来有意义的影响。使用者可以通过使用held-out data或者更多的通用模型的选择方法如十字交叉验证法(cross validation)获得最有的值。-f NUM:这个参数用于设置特征的cut-off阈值。CRF++训练时只使用出现次数不少于NUM次数的特征进行训练。默认值为1。当使用CRF++训练大规模数据时,单一特征的数量将达到数百万,此时选择这个参数很有用。这里有一个使用这两个参数的例子:% crf_learn -f 3 -c 1.5 template_file train_file model_file4.测试(解码)使用crf_test 命令:% crf_test -m model_file test_files ...其中,model_file是crf_learn创建的。在测试过程中,使用者不需要指定template file,因为,mode file已经有了template的信息。test_file是你想要标注序列标记的测试语料。这个文件的书写格式应该与训练文件一致。下面是一个crf_test输出的例子:% crf_test -m model test.dataRockwell&&&&&&& NNP&&&& B&&&&&& BInternational&& NNP&&&& I&&&&&& ICorp.&& NNP&&&& I&&&&&& I's&&&&& POS&&&& B&&&&&& BTulsa&& NNP&&&& I&&&&&& Iunit&&& NN&&&&& I&&&&&& I..其中,最后一列是模型估计的tag。如果第三列是标准的tag,则可以通过简单的比较第三列和第四列之间的差别计算出准确率。详细的层次(verbose level)-v选项:将设置verbose level。默认值为0。通过增加层次,你可以从CRF++获得额外的信息。层次1:你可以对每个tag使用边缘概率(marginal probabilities)(这是一种对输出tag的confidence measure),对输出使用条件概率(conditional probably)(针对整个输出的confidence measure)。例如:% crf_test -v1 -m model test.data| head# 0.478113Rockwell&&&&&&& NNP&&&& B&&&&&& B/0.992465International&& NNP&&&& I&&&&&& I/0.979089Corp.&& NNP&&&& I&&&&&& I/0.954883's&&&&& POS&&&& B&&&&&& B/0.986396Tulsa&& NNP&&&& I&&&&&& I/0.991966...其中,第一行的"# 0.478113"即是输出的条件概率,而且每一个输出tag各自含有一个概率,表示形式如“B/0.992465”。层次2:你可以对所有的其他候选求边缘概率。例如:% crf_test -v2 -m model test.data# 0.478113Rockwell&&&&&&& NNP&&&& B&&&&&& B/0.992465&&&&& B/0.992465&&&&& I/0.&&& O/0.International&& NNP&&&& I&&&&&& I/0.979089&&&&& B/0.0105273&&&& I/0.979089&&&&& O/0.0103833Corp.&& NNP&&&& I&&&&&& I/0.954883&&&&& B/0.&&& I/0.954883&&&&& O/0.040337's&&&&& POS&&&& B&&&&&& B/0.986396&&&&& B/0.986396&&&&& I/0.&&& O/0.Tulsa&& NNP&&&& I&&&&&& I/0.991966&&&&& B/0.&&& I/0.991966&&&&& O/0.unit&&& NN&&&&& I&&&&&& I/0.996169&&&&& B/0.&&& I/0.996169&&&&& O/0...N-best outputs-n选项:使用这个选项将获得N-best结果,它根据CRF计算出的条件概率排序得到。当选择了N-best结果,CRF++会自动添加一行,形式为“# N prob”,其中N是排序后的输出结果,从0开始。prob表示output的条件概率。需要注意的是,如果CRF++不能找到足够的N条路径是,它将放弃列举N-best结果。这种情况在所给的句子很短的情况下常出现。CRF++使用前向Viterbi和后向A*搜索相结合的方法。这种结合适应了n-best结果的需求。下面是一个N-best结果的例子:% crf_test -n 20 -m model test.data# 0 0.478113Rockwell&&&&&&& NNP&&&& B&&&&&& BInternational&& NNP&&&& I&&&&&& ICorp.&& NNP&&&& I&&&&&& I's&&&&& POS&&&& B&&&&&& B...# 1 0.194335Rockwell&&&&&&& NNP&&&& B&&&&&& BInternational&& NNP&&&& I&&&&&& I
阅读(13363) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
牛人,俺刚从java转android,请教高手一个问题:大家快来参与讨论吧:
请登录后评论。之前写的Apache Solr只介绍了简单的搭建以及导入数据等功能,最近由于项目要求,添加索引分词和搜索分词功能;分词的项目有包括好几个:smartcn、ictclas4j、IK、jeasy、庖丁、mmseg4j;
以上几种分词器各有优缺点,根据不同场景可分可定制和不可定制两种:
一种是基于中科院ICTCLAS的隐式马尔科夫HMM算法的中文分词器,如smartcn,ictclas4j,优点是分词准确度高,缺点是不能使用用户自定义词库;
另一种是基于最大匹配的分词器,如IK ,Jeasy,庖丁,优点是可以自定义词库,增加新词,缺点是分出来的垃圾词较多。
IKAnalyzer下载地址:https://ik-/files/IK%20Analyzer%202012FF_hf1.zip
这里我使用的是IK Analyzer 2012FF_hf1.zip这个包;因为我用的是solr4.x的;
解压、文件拷贝
下载之后用unzip解压,没有安装unzip童鞋安装下;
解压之后讲IKAnalyzer的jar包拷贝到$SOLR_HOME的lib目录下;将IKAnalyzer.conf.xml和stopword.dic放到classes目录下,我这里的classes目录是
/data/projects/apprank-/WEB-INF/classes重点文件说明&
* IKAnalyzer.conf.xml主要的作用是用于自定义分词字典以及停止词字典的指定;
&* stopword.dic是默认自带的停止词,你可以添加自己的停止词到这个文件中;
这里我们只讲IKAnalyzer的分词器配置。其实分词器的配置大同小异,IKAnalyzer具体配置如下;
&fieldType name=&text& class=&solr.TextField&&
&analyzer class=&org.wltea.analyzer.lucene.IKAnalyzer&/&
&/fieldType&
&fieldType name=&text_ik& class=&solr.TextField&&&
& & & &&analyzer type=&index& isMaxWordLength=&false& class=&org.wltea.analyzer.lucene.IKAnalyzer&/&&
& & & &&analyzer type=&query& isMaxWordLength=&true& class=&org.wltea.analyzer.lucene.IKAnalyzer&/&&
&/fieldType&如果是其他的分词器;也是类似,将class修改为对应的分词处理器类就OK;
配置完fieldType之后,我们将要使用到分词器的field的type属性修改为我们新添加fieldType;
&field name=&name& type=&text_ik& indexed=&true&/&这样重启之后,分词器就生效了!来看下效果
之前原本想使用mmseg4j的,但是网上查了之后据说分词效果不是很好。所以就用IKAnalyzer,而且mmseg4j的配置比IK要复杂一点;
自定义分词字典
接下来讲下自定义分词字典,前面我们在重点文件说明中以及提到了IKAnalyzer.cfg.xml的作用;先来看下这个文件的内容
hadoop@nutch4:/data/projects/clusters/IKAnalyzer$ more IKAnalyzer.cfg.xml
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE properties SYSTEM &/dtd/properties.dtd&&
&properties&
&comment&IK Analyzer 扩展配置&/comment&
&!--用户可以在这里配置自己的扩展字典
&entry key=&ext_dict&&ext.&/entry&
&!--用户可以在这里配置自己的扩展停止词字典--&
&entry key=&ext_stopwords&&stopword.&/entry&
&/properties&配置一目了然,很简单;
我们在IKAnalyzer.cfg.xml的同级目录下添加一个ext.dic的文件,文件内添加自己的分词字典,重启就可以了!
注:这里要把上面的ext_dict项的注释去掉,要不然不会起作用的;
看下我们的自定义分词字典ext.dic
天天爱消除
天天这里比较简单,我只添加了三个自定义分词,那么来看下效果把!
大家可以看到效果还不错。呵呵!
转载请注明来源地址:http://blog.csdn.net/weijonathan/article/details/
本文已收录于以下专栏:
相关文章推荐
public class IIKAnalyzerTest {
    public static void main(String[] args) throws IOException {
IKAnalyzer下载地址:https://ik-/files/IK%20Analyzer%202012FF_hf1.zip
对于机器学习,很多人的观点是:机器学习技术是今后所有技术人员都绕不过的一个门槛。 那么,普通程序员该学习机器学作为一名对机器学习心有向往的程序员,我该以什么样的姿势开始呢?
最近在做全文检索 在项目中有个需求是要动态的配置Solr的自定义扩展词库,在网上找了很多资料 发现关于这方面的知识比较少 千辛万苦终于找到了解决方案 在这里和大家分享一下1.自行下载mmseg4j有关...
solr5.5IK分词器
solr5.5CloudIK分词器
1:将IKAnalyzer_home文件夹下的stopword.dic和IKAnalyzer.cfg.xml复制到tomcat_home/webapps/solr/WEB-INF/classes下,并...
1:下载IKAnalyzer2012_u6.zip,解压缩至F:\software\Lucence\IKAnalyzer2012_u6,简写为IKAnalyzer_home
2:将IKAna...
感谢upxiaofeng的分享。 转载地址: 点击打开链接
准备工作:
目前最新版本6.0。下载solr 6.0:Solr6.0下载
JDK8 下载jdk1.8:jdk1.8【solr6.0是...
solr6.0中进行中文分词器IK Analyzer的配置和solr低版本中最大不同点在于IK Analyzer中jar包的引用。一般的IK分词jar包都是不能用的,因为IK分词中传统的jar不支持s...
1:修改tomcat_home/solr/conf/synonyms.txt,加入如下内容
beijing,北京
2:将synonyms.txt编码方式改为无BOM的UTF-8
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)5098人阅读
Java(150)
Ansj中文分词应用时,需要自定义词库,比如城中村,分词成城、中、村,需自定义词库,有时,也需要过滤单词。具体代码如下,可以结合执行结果看代码效果。
1、过滤词库
package csc.
import org.ansj.domain.R
import org.ansj.recognition.impl.FilterR
import org.ansj.splitWord.analysis.ToA
public class AnsjWordFilter {
public static void main(String[] args) {
String str = &不三不四,您好!欢迎使用ansj_seg,深圳有没有城中村这里有宽带吗?(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!& ;
//过滤词性和词汇
FilterRecognition fitler = new FilterRecognition();
//http://nlpchina.github.io/ansj_seg/content.html?name=词性说明
fitler.insertStopNatures(&w&); //过滤标点符号词性
fitler.insertStopNatures(&null&);//过滤null词性
fitler.insertStopNatures(&m&);//过滤m词性
fitler.insertStopWord(&不三不四&); //过滤单词
fitler.insertStopRegex(&城.*?&); //支持正则表达式
Result modifResult = ToAnalysis.parse(str).recognition(fitler); //过滤分词结果
System.out.println(modifResult.toString());
* 您好/l,欢迎/v,使用/v,ansj/en,seg/en,深圳/ns,有/v,没/d,有/v,村/n,这里/r,有/v,宽带/nz,吗/y,ansj/en,中文/nz,分词/n,在/p,这里/r,如果/c,你/r,遇到/v,什么/r,问题/n,都/d,可以/v,联系/v,我/r,我/r,一定/d,尽/v,我/r,所/u,能/v,帮助/v,大家/r,ansj/en,seg/en,更/d,快/a,更/d,准/a,更/d,自由/a
2、自定义词库,可以设置歧义词等
package csc.
import org.ansj.app.summary.SummaryC
import org.ansj.domain.R
import org.ansj.domain.T
import org.ansj.library.UserDefineL
import org.ansj.splitWord.analysis.ToA
import mons.lang.tire.domain.F
import mons.lang.tire.domain.V
import mons.lang.tire.library.L
public class AnsjWordDefine {
public static void main(String[] args) throws Exception {
String str = &不三不四,您好!欢迎使用ansj_seg,深圳有没有城中村这里有宽带吗?(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!& ;
// 增加新词,中间按照'\t'隔开
UserDefineLibrary.insertWord(&城中村&, &userDefine&, 1000);//自定义词汇、自定义词性
UserDefineLibrary.insertWord(&ansj中文分词&, &userDefine&, 1001);
Result terms = ToAnalysis.parse(str);
System.out.println(&增加自定义词库:& + terms.toString());
// 删除词语,只能删除.用户自定义的词典.
UserDefineLibrary.removeWord(&ansj中文分词&);
UserDefineLibrary.removeWord(&城中村&);
terms = ToAnalysis.parse(str);
System.out.println(&删除自定义词库:& + terms.toString());
Value value = new Value(&济南下车&, &济南&, &n&, &下车&, &v&);
System.out.println(ToAnalysis.parse(&我经济南下车到广州.中国经济南下势头迅猛!&));
Library.insertWord(UserDefineLibrary.ambiguityForest, value);
System.out.println(ToAnalysis.parse(&我经济南下车到广州.中国经济南下势头迅猛!&));
// 多用户词典
String str1 = &神探夏洛克这部电影作者.是一个dota迷&;
System.out.println(ToAnalysis.parse(str1));
// 两个词汇 神探夏洛克 douta迷
Forest dic1 = new Forest();
Library.insertWord(dic1, new Value(&神探夏洛克&, &define&, &1000&));
Forest dic2 = new Forest();
Library.insertWord(dic2, new Value(&dota迷&, &define&, &1000&));
System.out.println(ToAnalysis.parse(str1, dic1, dic2));
增加自定义词库:不三不四/i,,/w,您好/l,!/w,欢迎/v,使用/v,ansj/en,_,seg/en,,,深圳/ns,有/v,没/d,有/v,城中村/userDefine,这里/r,有/v,宽带/nz,吗/y,?,(,ansj中文分词/userDefine,),在/p,这里/r,如果/c,你/r,遇到/v,什么/r,问题/n,都/d,可以/v,联系/v,我/r,./m,我/r,一定/d,尽/v,我/r,所/u,能/v,./m,帮助/v,大家/r,./m,ansj/en,_,seg/en,更/d,快/a,,,更/d,准/a,,,更/d,自由/a,!
删除自定义词库:不三不四/i,,/w,您好/l,!/w,欢迎/v,使用/v,ansj/en,_,seg/en,,,深圳/ns,有/v,没/d,有/v,城中/ns,村/n,这里/r,有/v,宽带/nz,吗/y,?,(,ansj/en,中文/nz,分词/n,),在/p,这里/r,如果/c,你/r,遇到/v,什么/r,问题/n,都/d,可以/v,联系/v,我/r,./m,我/r,一定/d,尽/v,我/r,所/u,能/v,./m,帮助/v,大家/r,./m,ansj/en,_,seg/en,更/d,快/a,,,更/d,准/a,,,更/d,自由/a,!
我/r,经济/n,南/f,下/f,车/n,到/v,广州/ns,./m,中国/ns,经济/n,南/f,下/f,势头/n,迅猛/a,!
我/r,经/p,济南/n,下车/v,到/v,广州/ns,./m,中国/ns,经济/n,南/f,下/f,势头/n,迅猛/a,!
神/n,探/v,夏洛克/nr,这部/r,电影/n,作者/n,./m,是/v,一个/m,dota/en,迷/v
神探夏洛克/define,这部/r,电影/n,作者/n,./m,是/v,一个/m,dota迷/define
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1743401次
积分:23818
积分:23818
排名:第285名
原创:640篇
转载:61篇
评论:121条
文章:29篇
阅读:41422
文章:58篇
阅读:121738
文章:71篇
阅读:178014
文章:44篇
阅读:98352
(13)(23)(39)(70)(40)(27)(53)(13)(13)(28)(25)(12)(6)(22)(27)(13)(9)(13)(15)(22)(6)(2)(1)(3)(1)(2)(1)(2)(1)(3)(2)(7)(2)(5)(4)(1)(4)(2)(2)(6)(5)(5)(7)(11)(4)(7)(8)(6)(7)(3)(4)(1)(1)(9)(6)(4)(4)(1)(2)(4)(3)(3)(1)(2)(2)(2)(3)(11)(2)(2)(1)(2)(1)(1)(2)(6)(3)(2)(1)(1)(2)(2)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'后使用快捷导航没有帐号?
查看: 3217|回复: 9
庖丁解牛分词之自定义词库[自定义词典]
金牌会员, 积分 2563, 距离下一级还需 437 积分
论坛徽章:9
本帖最后由 lh_lihuinihao 于
10:55 编辑
发现很久很久没更新了,尤其是这个模块,也就好久没进步了!学习如逆水行舟,不进则退!趁着还没到白首之际,应该多学习。
首先,还是先贴出来参考来源,毕竟非原创。
现在继续:
1、到下载paoding-analysis-2.0.4-alpha2.zip
2、然后解压缩,找到dic文件夹,复制到你想存放的文件夹下
1.png (17.9 KB)
10:49 上传
2.png (54.82 KB)
10:49 上传
3、配置环境变量,如果不配置,运行会报错,报错的中文信息也是需要进行配置环境变量
3.png (30.43 KB)
10:49 上传
4、删除.compiled文件
4.png (2.39 KB)
10:49 上传
5、新建一个文本文件,后缀名问.dic,采用utf-8保存到dic的文件目录中,这里保存在了E:\paodingTest\dic\locale中
5.png (95.44 KB)
10:49 上传
6、下面我们写个分词测试程序
6.jpg (86.73 KB)
10:49 上传
7、自定义词库的情况下分词结果,首先看到的是词库的编译信息
7.png (17.15 KB)
10:49 上传
8、带自定义词库的分词结果
8.png (21.78 KB)
10:49 上传
9、删除自定义词库和.compiled文件,重新分词
9.png (9.69 KB)
10:49 上传
10、放在一起比较,效果还是有的
10.png (90.88 KB)
10:49 上传
11、假设我们在分词的时候,需要把运、动分开,默认情况下是不分开的
11.png (18.19 KB)
10:50 上传
12、在词库中增加两个词运和动
12.png (23.08 KB)
10:50 上传
13、当然,如果想把这个分词器用得更好,还需要深入去了解和思考该分词方法,比如,“我是运动员”,虽然我们在自定义词库中填加了词“运动员”,但是依旧没有切分成“我”,“是”,“运动员”,反而出现了不相关的”动员“这个词语。而需要同时将”运动“切分为“运”,“动“,”运动“,那也是需要好好思考用法,当然这也和中国汉语的特殊性有关,例如:“乒乓球拍卖完了”,在没有上下文的情况下本身就存在歧义。
13.png (34.87 KB)
10:50 上传
论坛徽章:0
金牌会员, 积分 1804, 距离下一级还需 1196 积分
论坛徽章:4
高级会员, 积分 878, 距离下一级还需 122 积分
论坛徽章:1
金牌会员, 积分 2563, 距离下一级还需 437 积分
论坛徽章:9
依剑载酒 发表于
我去把图从新传一下
金牌会员, 积分 2563, 距离下一级还需 437 积分
论坛徽章:9
lh_lihuinihao 发表于
我去把图从新传一下
金牌会员, 积分 1010, 距离下一级还需 1990 积分
论坛徽章:3
金牌会员, 积分 2410, 距离下一级还需 590 积分
论坛徽章:17
论坛徽章:18
这么NB,可以啊。。哈哈。
金牌会员, 积分 1165, 距离下一级还需 1835 积分
论坛徽章:3

我要回帖

更多关于 中文分词词典下载 的文章

 

随机推荐