python--jieba分词、词性标注、关键词提取、添加自定义词典完整代码示例

jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:

  • 支持 3 种分词模式:精确模式、全模式、搜索引擎模式
  • 支持繁体分词
  • 支持自定义词典

1 分词

  可使用 jieba.cut jieba.cut_for_search 方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语(unicode),或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。其中:

  • jieba.cutjieba.lcut 接受 3 个参数:
    • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
    • cut_all 参数:是否使用全模式,默认值为 False
    • HMM 参数:用来控制是否使用 HMM 模型,默认值为 True
  • jieba.cut_for_searchjieba.lcut_for_search 接受 2 个参数:
    • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
    • HMM 参数:用来控制是否使用 HMM 模型,默认值为 True

# 尽量不要使用 GBK 字符串,可能无法预料地错误解码成 UTF-8

 

Jieba提供了三种分词模式:

  1. 精确模式,试图将句子最精确地切开,适合文本分析;
  2. 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  3. 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

示例代码如下:

import jieba

sent = "他来到北京大学读书。"

seg_list1 = jieba.cut(sent, cut_all=True)
print('全模式:', '/'.join(seg_list1))

seg_list2 = jieba.cut(sent, cut_all=False)
print('精确模式:', '/'.join(seg_list2))

seg_list3 = jieba.cut(sent)
print('默认精确模式:', '/'.join(seg_list3))

seg_list4 = jieba.cut_for_search(sent)
print('搜索引擎模式:', '/'.join(seg_list4))

运行结果:

全模式: 他/来到/北京/北京大学/大学/读书//
精确模式: 他/来到/北京大学/读书/。
默认精确模式: 他/来到/北京大学/读书/。
搜索引擎模式: 他/来到/北京/大学/北京大学/读书/。

2、添加用户自定义词典

开发者可以指定自定义词典,以便包含 jieba 词库里没有的词,词典格式如下:

 词语 词频(可省略) 词性(可省略)

例如:

创新办 3 i
云计算 5
瑟琳娜 nz

使用 jieba.load_userdict(file_name) 即可载入词典。file_name 为文件类对象或自定义词典的路径

示例代码如下:

import jieba

'''功能:添加用户自定义词典'''

sent = "周大福是创新办主任也是云计算方面的专家"

seg_list = jieba.cut(sent, cut_all=False)
print('未添加用户词典:', '/'.join(seg_list))

#加载用户自定义词典
jieba.load_userdict("userDic.txt")

seg_list = jieba.cut(sent, cut_all=False)
print('添加用户词典:', '/'.join(seg_list))

运行结果:

未添加用户词典: 周大福/是/创新/办/主任/也/是/云/计算/方面/的/专家

添加用户词典: 周大福/是/创新办/主任/也/是/云计算/方面/的/专家

3、关键词提取

jieba 提供了两种关键词提取方法,分别基于 TF-IDF 算法和 TextRank 算法。

通过 jieba.analyse.extract_tags 方法可以基于 TF-IDF 算法进行关键词提取,该方法共有 4 个参数:

  • sentence:为待提取的文本
  • topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight:是否一并返回关键词权重值,默认值为 False
  • allowPOS:仅包括指定词性的词,默认值为空

通过 jieba.analyse.textrank 方法可以使用基于 TextRank 算法的关键词提取,其与 'jieba.analyse.extract_tags' 有一样的参数,但前者默认过滤词性(allowPOS=('ns', 'n', 'vn', 'v'))。

代码示例如下:


import jieba.analyse as anls #关键词提取

'''功能:提取关键词'''

sent = open("all.txt", 'r', encoding='UTF-8').read()

#基于tf-idf提取关键词
print("基于TF-IDF提取关键词结果:")
for x, w in anls.extract_tags(sent, topK=20, withWeight=True):
    print('%s %s' % (x, w))

#基于textrank提取关键词
print("基于textrank提取关键词结果:")
for x, w in anls.textrank(sent, withWeight=True):
    print('%s %s' % (x, w))

运行结果:

基于TF-IDF提取关键词结果:

故宫 0.2926176361335443
北京故宫 0.264979505
2019 0.22698925638417722
外朝 0.1513261709227848
2018 0.1513261709227848
中心 0.12202795792556963
古建筑 0.11424658644012657
大殿 0.10322119571443038
紫禁城 0.09920117016822785
永乐 0.09911316359455696
统称 0.0955449146286076
宫殿 0.09541328542329114
万平方米 0.0929427829007595
列为 0.09066487540987342
九千余 0.08797897248101266
世界 0.08292777352348102
和内廷 0.07779265657911393
72 0.0756630854613924
15 0.0756630854613924
1406 0.0756630854613924

基于textrank提取关键词结果:

故宫 1.0
中心 0.9908920177809065
世界 0.5734006593111067
大殿 0.5521326736013975
北京故宫 0.5316046737608524
英国 0.4986608115801715
国家 0.48905863236581826
修缮 0.457942099649872
中国 0.4571298768895292
列为 0.4563189310093983
建筑 0.4465371080385551
南京 0.4374665601969024
外朝 0.43039726183147553
统称 0.42592844268023056
工作 0.38930993246593065
保护 0.38300696880781676
保存 0.37770077979626976
皇后 0.3717748063436477
美国白宫 0.37027900907588707
居住 0.36903003334388784

4、词性标注

import jieba.posseg as pseg #词性标注

sent = "他在北京大学读书"

words = pseg.cut(sent)
for word, flag in words:
    print("{0} {1}".format(word, flag))

 运行结果:

他 r
Prefix dict has been built succesfully.
在 p
北京大学 nt
读书 n

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值