NLP_Python3——jieba中文处理

相对于英语使用空格分隔开每个单词,中文是没有固定的分隔符来分开每个词语的,而大部分情况下词语却是进行NLP的基础,故在此使用jieba中文分词来对语句进行分词。

jieba分词github地址:https://github.com/fxsjy/jieba

jieba分词github上面的说明已经非常详细了,只要稍微有点python基础应该都可以按图索骥的照搬,建议大家照着api把jiaba分词的功能都试一遍,这样比看文字去猜要印象深刻,这里就不再copy过来水字数了<(* ̄▽ ̄*)/ 这边就将一些关键点通过脚本简单的描述一下

1.cut与cut_for_search区别:

cut_for_search适用于搜索引擎构建倒排索引,分词效果接近cut的全模式;两者返回的都是generator类型结果

2.cut的全模式与精确模式:

全模式会匹配所有可能成词的字符串并将其列出;精确模式是将原文进行划分,如果导入专业词典,可以提高分词的准确率;默认情况下,cut使用精确模式


import jieba

ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'

strs = jieba.cut(ori, cut_all=True)
print('全模式Cut:', ','.join(strs))
strs = jieba.cut(ori, cut_all=False)
print('精确模式Cut:', ','.join(strs))
strs = jieba.cut_for_search(ori)
print('Cut_for_search:', ','.join(strs))

**********************************************
输出结果:
全模式Cut: 这种,是,四,轴,无人,无人机,人机,植保,机,,,带有,四个,喷嘴,,,主要,要是,喷洒,农药,,,因为,螺旋,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打到,植被,的,根底,底部,,,让,植被,更,容易,吸收

精确模式Cut: 这种,是,四轴,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

Cut_for_search: 这种,是,四轴,无人,人机,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

3.lcut和lcut_for_search与cut和cut_for_search类似只是返回结果为list

import jieba

ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
strs = jieba.cut(ori, cut_all=False)
print('精确模式Cut类型:', type(strs))
str_list = jieba.lcut(ori, cut_all=False)
print('精确模式Lcut类型:', type(str_list))

***********************************
输出结果:
精确模式Cut类型: <class 'generator'>
精确模式Lcut类型: <class 'list'>

4.添加用户词典(通常用于添加术语库):

大量的可以通过jieba.load_userdict(file_name)加载,少量的可以用jiaba.add_word(word,freq=None,tag=None)和jieba.del_word(word)来动态调整,使用jiaba.suggest_freq(segment,tune=True)可以调节词语的词频,进而影响到改词能否分出来;注意如果添加新词后分词时需要将HMM参数调为False,否则jieba将可能会忽略添加的新词而通过HMM算法进行分词

import jieba

ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
strs = jieba.cut(ori, HMM=True)
print('精确模式Cut:', ','.join(strs))
strs = jieba.cut(ori, HMM=False)
print('精确模式Cut:', ','.join(strs))
jieba.suggest_freq(('植保机'), True)
strs = jieba.cut(ori, HMM=False)
print('精确模式Cut:', ','.join(strs))

***************************************
输出结果:
开启HMM模式Cut: 
这种,是,四轴,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

关闭HMM模式Cut: 
这种,是,四,轴,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

关闭HMM且加入调整新词词频Cut: 
这种,是,四,轴,无人机,植保机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

5.提取关键词

    1.1)基于TF-IDF算法的关键词抽取:

impory jieba


ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
strs = jieba.analyse.extract_tags(sentence=ori,  # 待提取原文
                                  topK=20,  # 返回几个TF/IDF权重最大的关键词,默认为20
                                  withWeight=True,  # 是否一并返回关键词的权重值,默认为False
                                  allowPOS=())  # 仅包括指定词性的词,默认为空
print('关键词及权重为:')
for (k, v) in strs:
    print(k, v)

************************************
输出结果为:
关键词及权重为:
农药 0.8217097884639999
植被 0.719015454252
四轴 0.597738375145
植保 0.591061805515
喷嘴 0.5302420393
下压 0.506973876815
喷洒 0.503601812775
无人机 0.48260912049650007
螺旋桨 0.443186252478
底部 0.3419243009845
带有 0.33062166254799996
吸收 0.311675969833
四个 0.306925352242
容易 0.270697183402
产生 0.2270312503385
因为 0.2024189068105
这种 0.19852254011249998
主要 0.172928225041

    1.2)切换IDF文本语料库为自定义语料库路径:jieba.analyse.set_idf_path(file_name)

    1.3)  切换关键词提取所使用停止词文本语料库为自定义语料库路径:jieba.analyse.set_stop_words(file_name)

    2.1) 基于TextRank算法的关键词抽取:此函数与基于TF-IDF算法的关键词抽取函数参数相同,需要注意的是此函数默认过滤词性,故allowPOS参数不能为空,否则会得到空值

import jieba.analyse

ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
strs = jieba.analyse.textrank(sentence=ori,  # 待提取原文
                              topK=20,  # 返回几个TF/IDF权重最大的关键词,默认为20
                              withWeight=True,  # 是否一并返回关键词的权重值,默认为False
                              allowPOS=('ns', 'n', 'vn', 'v'))  # 仅包括指定词性的词,默认过滤词性

print('关键词及权重为:')
for (k, v) in strs:
    print(k, v)

*********************************************
输出结果:
关键词及权重为:
螺旋桨 1.0
农药 0.8759898646172835
产生 0.7867742915818781
喷洒 0.6996158154963905
风是 0.5973042098678957
下压 0.590317791482311
喷嘴 0.5844892605660431
植被 0.5674678333270774
带有 0.3326323546342714
吸收 0.32263772112456274

6.词性标注:

import jieba.posseg as pseg

ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'

words = pseg.cut(ori)
for word, flag in words:
    print(word, flag)

**********************************************
输出结果为:
这种 r
是 v
四 m
轴 n
无人机 l
植保 nr
机 n
, x
带有 v
四个 m
喷嘴 v
, x
主要 b
是 v
喷洒 v
农药 n
, x
因为 c
螺旋桨 n
产生 n
的 uj
风是 n
下压 v
的 uj
, x
能 v
让 v
农药 n
打 v
到 v
植被 n
的 uj
根 a
底部 f
, x
让 v
植被 n
更 d
容易 a
吸收 v

7.并行分词(据说目前还未支持windows,最少github上是这么写的~~):将文本分行后可以将各行文本分配给多个进程进行分词,最后将结果合并,进而利用多线程提升分词效率,此功能基于python自带的multiprocessing模块

    jieba.enable_parallel(n)  # 开启并行分词模式,参数n为并行进程数

    jieba.disable_parallel()  # 关闭并行分词模式

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值