jieba分词与词性标注自定义词典支持特殊字符

jieba分词可以自定义词表和词库。但是目前版本尚不支持特殊字符(如空格等)。

参考github上的网友们的解答,总结修改方法如下:

1、修改目录(我的为windows系统,使用miniconda,路径供参考,具体则需要根据自己实际情况进行修改):

文件路径 D:\ProgramData\Miniconda3\envs\python36\Lib\site-packages\jieba

2、修改内容

  • 修改jieba根目录 包括init和词表
  • 修改posseg目录 包括init
  • 参考网站 https://github.com/fxsjy/jieba/issues/423
  • 示例与代码可参照我的github:https://github.com/q759729997/jieba_special_character
打开默认词典(根目录)或自定义词典,把所有用来间隔词频和词性的空格间隔符改成@@
(选用@@是因为一般关键词里遇到这个分隔符的几率比较小吧)

继续,打开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)

3、测试代码

import jieba
import jieba.posseg as pseg

jieba.add_word('奥迪Q7',tag='car_type')
jieba.add_word('A3 e-tron',tag='car_type')
jieba.add_word('奥迪R8',tag='car_type')

line = '奥迪Q7 e-tron是奥迪系列的车。A3 e-tron也是车。奥迪R8是另一个车。'
line_txt_list = []
words = pseg.cut(line)
for word, flag in words:
    line_txt_list.append('%s %s' % (word, flag))
print('|||'.join(line_txt_list))

4、测试结果

奥迪Q7 car_type|||  x|||e eng|||- x|||tron eng|||是 v|||奥迪 nz|||系列 q|||的 uj|||车 n|||。 x|||A3 e-tron car_type|||也 d|||是 v|||车 n|||。 x|||奥迪R8 car_type|||是 v|||另 r|||一个 m|||车 n|||。 x





  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值