>>> from env_helper import info; info()
页面更新时间: 2024-01-15 21:16:08
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-16-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.4. jieba添加自定义词典

开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词来增强歧义纠错能力

1.4.1. 1、通过词典文件载入自定义词典

创建一个dict.txt,然后写入你的分词,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。

词频省略时使用自动计算的能保证分出该词的词频。

dict.txt内容例如:

云计算 5 李小福 2 nr 创新办 3 i easy_install 3 eng 好用 300 韩玉赏鉴 3 nz 八一双鹿 3 nz 台中 凱特琳 nz Edu Trust认证 2000

jieba.load_userdict(file_name)加载自定义词点

在分词前通过jieba.load_userdict(file_name)来加载分词字典:

用法: jieba.load_userdict(file_name) 。 file_name 为文件类对象或自定义词典的路径

>>> # !pip install jieba
>>> import jieba
>>>
>>> text1="必应输入法官方版是微软亚洲研究院推出的新一代拼音输入法."
>>>
>>> words = jieba.cut(text1)
>>> print('载入自定义词典前:','/'.join(words))
Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 0.765 seconds.
Prefix dict has been built successfully.
载入自定义词典前: 必/应/输入法/官方版/是/微软/亚洲/研究院/推出/的/新一代/拼音输入/法/.
>>> jieba.load_userdict("dict.txt")
>>> words2 = jieba.cut(text1)
>>> print('载入自定义词典后:','/'.join(words2))
载入自定义词典后: 必应输入法/官方版/是/微软亚洲研究院/推出/的/新一代/拼音输入法/.

词频的作用

频率越高,成词的概率就越大。比如”江州市长江大桥”,既可以是”江州/市长/江大桥“,也可以是”江州/市/长江大桥“。

假设要保证第一种划分的话,我们需要保证P(江州)_P(市长)_P(江大桥)> P(江州)_P(市)_P(长江大桥)

1.4.2. 在程序中动态修改词典

add_word(word, freq=None, tag=None) 添加词

>>> import jieba
>>>
>>> text2='双十一已经不单单是光棍节了。'
>>>
>>> words3 = jieba.cut(text2)
>>>
>>> print('添加自定义词之前:','/'.join(words3))
添加自定义词之前: 双十/一/已经/不单单是/光棍节/了/。
>>> jieba.add_word("双十一")#添加自定义词
>>>
>>> words4 = jieba.cut(text2)
>>>
>>> print('添加自定义词后:','/'.join(words4))
添加自定义词后: 双十一/已经/不单单是/光棍节/了/。

del_word(word) 删除词

>>> jieba.del_word("双十一")#删除自定义词
>>>
>>> words5 = jieba.cut(text2)
>>>
>>> print('删除自定义词后:','/'.join(words5))
删除自定义词后: 双十/一/已经/不单单是/光棍节/了/。

suggest_freq(segment, tune=True) 调节单个词语的词频

使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

>>> import jieba
>>>
>>> print('调节词频之前'+'/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
调节词频之前如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
>>>
>>> print('调节词频后'+'/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
调节词频后如果/放到/post/中/将/出错/。
>>> print('调节词频之前'+'/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
调节词频之前「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
>>>
>>> print('调节词频后'+'/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
调节词频后「/台中/」/正确/应该/不会/被/切开