Stanford Corenlp中文分词自定义词典(扩展词典)

Stanford Corenlp是斯坦福大学的自然语言处理工具,其中中文分词是基于条件随机场CRF (Conditional Random Field) ,不是基于字典的直接匹配。最近调用Stanford Word Segmenter进行中文分词时,发现一些tokens切割不符合我们的预期,比如“大数据”被切分为“大 / 数据”,“信息安全”切分为“信息 / 安全”, “草泥马”被切分为草 / 泥马。我们希望将某些特定的词作为一个token来处理,因此想通过增加自定义词典(扩展词典)来实现。

一.网络上已有的资源

为了解决Stanford Corenlp中文分词自定义词典问题,前后耗费了大概有2- 3天的时间,几乎查找了内外网所有相关的资源,为了避免后面的童鞋再走弯路,下面归纳分析网络上关于此问题的资源:

1. Stanford Corenlp + IKAnalyzer

https://www.cnblogs.com/whuqin/p/6149742.html (还有一系列雷同文章)
这个方法看起来好像有些可行,模仿ChineseSegmenterAnnotator实现IKSegmentAnnotator,比较了这两个类,主要区别在于这两个方法
IKSegmentAnnotator

private List<String> splitWords(String str) throws Exception{...}

ChineseSegmenterAnnotator

private void splitCharacters(CoreMap annotation) {...}

我认为该方法就是把stanford的分词器(基于CRF)换成了IKAnalyzer的分词器IKSegmenter(基于词典匹配),代码不全,也没有任何注释,还要研究IKAnalyzer指定扩展词典和删除词典。对于仅应用分词而非研究分词的人来说,很难搞清楚,反正我是没运行成功,如果有小伙伴明白这种处理方法,请多多指教。

2. 引入自定义词典

https://blog.csdn.net/dushenzhi/article/details/8734173
下面把这段代码我能看懂的部分进行解释

java -mx1g -cp seg.jar edu.stanford.nlp.ie.crf.CRFClassifier
 //-mx1g 指定运行内存
//-cp 或者-classpath也可以,指定jar包路径
/* seg.jar分词jar包,在stanford-segmenter-2018-10-16文件夹下面,我下载下来的分词jar包命名是 stanford-segmenter-3.9.2.jar*/
     -sighanCorporaDict data
     -loadClassifier data/ctb.gz
     -testFile preprocess-$1.txt  //测试文件,即要分词的文本
     -inputEncoding UTF-8    //urf-8编码
     -sighanPostProcessing true
     -serDictionary data/dict-chris6.ser.gz,data/cedict.txt,data/ntusd.txt  
     //分词词典为原词典data/dict-chris6.ser.gz和自定义的词典data/cedict.txt,data/ntusd.txt(自定义词典可以有多个)
     -keepAllWhitespaces false >$1_seged.txt
     //分词结果
  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值