基于python的jieba包中文分词
- jieba包
- 载入词典
- 调整词典
- 1、add_word()
- 2、del_word()
- 3、get_FREQ()
- 4、suggest_freq()
jieba包
载入词典
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率。
可通过以下方法引入词典。
jieba.load_userdict(file_name)
此方法包括一个参数。
file_name :文件类对象或自定义词典的路径。
自定义词典的格式需要和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
自定义词典的官方举例:
云计算 5
李小福 2 nr
创新办 3 i
easy_install 3 eng
好用 300
韩玉赏鉴 3 nz
八一双鹿 3 nz
台中
凱特琳 nz
Edu Trust认证 2000
测试加入自定义词典产生的变化:
#encoding=utf-8
import jieba
jieba.load_userdict("userdict.txt")
test_sent = "李小福是创新办主任也是云计算方面的专家"
words = jieba.cut(test_sent)
print('/'.join(words))
之前: 李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家 /
加载自定义词库后:李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家 /
调整词典
1、add_word()
add_word(word, freq=None, tag=None)
用于增加词。
2、del_word()
del_word(word)
用于删除词。
方法1和2可以在程序中动态修改词典。
3、get_FREQ()
get_FREQ(word)
用来统计当前词的词频。
>>> import jieba
>>> testlist = [('今天天气不错', ('今天', '天气')),
... ('如果放到post中将出错。', ('中', '将')),
... ('我们中出了一个叛徒', ('中', '出'))]
>>> for sent, seg in testlist:
... print('/'.join(jieba.cut(sent, HMM=False))) # 将HMM的值设置为False的原因 时让jieba不对没有的词语进行猜测
... word = ''.join(seg)
... print('%s Before: %s, After: %s' % (word, jieba.get_FREQ(word), jieba.suggest_freq(seg, True)))
... print('/'.join(jieba.cut(sent, HMM=False)))
...
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/qv/xffg8dxj2bqb5jxyf4spdsnc0000gn/T/jieba.cache
Loading model cost 0.606 seconds.
Prefix dict has been built successfully.
今天天气/不错
今天天气 Before: 3, After: 0
今天/天气/不错
如果/放到/post/中将/出错/。
中将 Before: 763, After: 494
如果/放到/post/中/将/出错/。
我们/中/出/了/一个/叛徒
中出 Before: 3, After: 3
我们/中/出/了/一个/叛徒
4、suggest_freq()
suggest_freq(segment, tune=True)
此方法可调节单个词语的词频,使其能(或不能)被分出来。因此在测试该方法时需要将HMM关闭,防止其自动组成新词,影响结果。
以下代码用于测试suggest_freq()函数的作用。
>>> import jieba
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
494
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中/将/出错/。
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
69
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台中/」/正确/应该/不会/被/切开
在第一个例子中,“中”和“将”最开始没有被分开,在使用suggest_freq()函数之后,“中”和“将”被分开。
在第二个例子中,“台”和“中”最开始被分开,在使用suggest_freq()函数之后,“台”和“中”没有被分开。