基于python的jieba包中文分词(二)

jieba包

载入词典

开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率。

可通过以下方法引入词典。

 jieba.load_userdict(file_name) 

此方法包括一个参数。
file_name :文件类对象或自定义词典的路径。

自定义词典的格式需要和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200417230107399.png
自定义词典的官方举例:

云计算 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()函数之后,“台”和“中”没有被分开。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值