自定义词典中含有特殊字符导致不生效
在jieba分词时,为了适应自己的语言环境,所以很多时候需要配置自定义词典。但是由于很多时候语料比较复杂,有可能会存在一下特殊字符,但是又需要把这些特殊字符用结巴分词分出来,比如说一些外国人名Coco·Chanel,J.K. Rowling等。想将这些词在文本中分出来,需要对jieba做一些更改。
打开默认词典(根目录)或自定义词典,把所有用来间隔词频和词性的空格间隔符改成@@(选用@@是因为一般关键词里遇到这个分隔符的几率比较小吧)
打开jieba根目录下init.py
搜索 re_han_default = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._]+)", re.U)
改成 re_han_default = re.compile("(.+)", re.U)
搜索 re_userdict = re.compile('^(.+?)( [0-9]+)?( [a-z]+)?$', re.U)
改成 re_userdict = re.compile('^(.+?)(\u0040\u0040[0-9]+)?(\u0040\u0040[a-z]+)?$', re.U)
搜索word, freq = line.split(' ')[:2]
改成word, freq = line.split('\u0040\u0040')[:2]
补充:若用的全模式继续改。
搜索 re_han_cut_all = re.compile("([\u4E00-\u9FD5]+)", re.U)
改成 re_han_cut_all = re.compile("(.+)", re.U)
可能会报错ValueError: invalid POS dictionary entry in C:xxx\xxx\
这个时候尝试删除 tmp/jieba.cache. 具体路径在哪儿,可以在jieba输出的日志中查看。
原文链接 https://github.com/fxsjy/jieba/issues/423
网友评论