jieba结巴分词,如何加载自定义分词词典?条目词性权重
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
jieba
结巴分词,如果对于分词结果不满意的话,可以使用load_userdict
函数加载自定义分词词典,也可以使用add_word
函数加载某一条条目,同时还可以自定义词性和权重,通过调整权重就可以影响最终的分词结果。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述结巴分词加载自定义条目的两种方式。测试环境:win10
,python@3.6.8
,jieba@0.42.1
。
jieba.add_word()
基本格式:
jieba.add_word(文字, 权重, 词性)
jieba.add_word(文字)
jieba.add_word(文字, tag="")
这种方式的弊端就是:如果权重填的太低,比如“0”。那么,这个条目极有可能是不生效的。
测试代码如下:
jieba.add_word("毕业于", 999, "aaa")
有add_word()
函数,就有del_word()
函数。参考:
jieba.del_word("毕业于")
jieba.del_word("毕业于", tag="aaa")
jieba.add_word()
,用于添加一个条目。但是,存在几个变种。- 如果相关条目没有生效,就需要增加权重值。
- 最后一个参数,用于定义一个词性。当然,词性归属需要遵守通用的词性标准。
jieba.load_userdict()
比起一个一个的条目单个添加,也可以把这些条目定义在一个.txt
文本里面,格式如下:
文本 权重 词性
或者
文本 词性
格式如下图所示:
测试代码:
jieba.load_userdict("dict.txt")
可能遇到的问题
在实际的代码运行过程中,可能会出现找不到文件的情况。报错信息类似如下:
File "/opt/anaconda3/lib/python3.8/site-packages/jieba/__init__.py", line 398, in load_userdict
f = open(f, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
那么,可以考虑下面的类似代码,使用os
来拼接一下【绝对路径】。
jieba.load_userdict(os.path.join(os.path.dirname(__file__), "userdict.txt"))
最终代码
结合上一次的结巴分词的文章,相关链接:
添加自定义词典的功能,测试代码如下:
import jieba, jieba.posseg, os
jieba.load_userdict(os.path.join(os.path.dirname(__file__), "userdict.txt"))
jieba.add_word("毕业于", 999, "aaa")
# jieba.del_word("毕业于")
words = "苏南大叔毕业于北京大学"
seg_list = jieba.cut(words)
print('/ '.join(seg_list)) # 苏南大叔/ 毕业于/ 北京大学
result = jieba.posseg.cut(words)
res = ""
for w in result:
res += w.word+"/"+w.flag + " "
print(res) # 苏南大叔/nnn 毕业于/aaa 北京大学/nt
如果没有自定义词典的话,这个分词结果是:
苏南/ 大叔/ 毕业/ 于/ 北京大学
苏南/ns 大叔/n 毕业/n 于/p 北京大学/nt
有了自定义词典之后,分词结果如下:
苏南大叔/ 毕业于/ 北京大学
苏南大叔/nnn 毕业于/aaa 北京大学/nt
当然,这里的nnn
词性和aaa
词性,都是瞎编的。实际上在通用的标准里面,并没有这两个词性定义。如果想知道更多的词性原始设定,可以参考下面这篇文章:
相关文档
综述
结巴分词可以通过自定义分词词典来获得更好的分词效果。其中,如果自定义的分词词条如果没有生效的话,需要增加权重。更多结巴分词的经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。