当前位置:   article > 正文

NLP_Python3——jieba中文处理_jieba lcut和lcut_for_search区别

jieba lcut和lcut_for_search区别

相对于英语使用空格分隔开每个单词,中文是没有固定的分隔符来分开每个词语的,而大部分情况下词语却是进行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使用精确模式

  1. import jieba
  2. ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
  3. strs = jieba.cut(ori, cut_all=True)
  4. print('全模式Cut:', ','.join(strs))
  5. strs = jieba.cut(ori, cut_all=False)
  6. print('精确模式Cut:', ','.join(strs))
  7. strs = jieba.cut_for_search(ori)
  8. print('Cut_for_search:', ','.join(strs))
  9. **********************************************
  10. 输出结果:
  11. 全模式Cut: 这种,是,四,轴,无人,无人机,人机,植保,机,,,带有,四个,喷嘴,,,主要,要是,喷洒,农药,,,因为,螺旋,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打到,植被,的,根底,底部,,,让,植被,更,容易,吸收
  12. 精确模式Cut: 这种,是,四轴,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收
  13. Cut_for_search: 这种,是,四轴,无人,人机,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

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

  1. import jieba
  2. ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
  3. strs = jieba.cut(ori, cut_all=False)
  4. print('精确模式Cut类型:', type(strs))
  5. str_list = jieba.lcut(ori, cut_all=False)
  6. print('精确模式Lcut类型:', type(str_list))
  7. ***********************************
  8. 输出结果:
  9. 精确模式Cut类型: <class 'generator'>
  10. 精确模式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算法进行分词

  1. import jieba
  2. ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
  3. strs = jieba.cut(ori, HMM=True)
  4. print('精确模式Cut:', ','.join(strs))
  5. strs = jieba.cut(ori, HMM=False)
  6. print('精确模式Cut:', ','.join(strs))
  7. jieba.suggest_freq(('植保机'), True)
  8. strs = jieba.cut(ori, HMM=False)
  9. print('精确模式Cut:', ','.join(strs))
  10. ***************************************
  11. 输出结果:
  12. 开启HMM模式Cut:
  13. 这种,是,四轴,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收
  14. 关闭HMM模式Cut:
  15. 这种,是,四,轴,无人机,植保,机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收
  16. 关闭HMM且加入调整新词词频Cut:
  17. 这种,是,四,轴,无人机,植保机,,,带有,四个,喷嘴,,,主要,是,喷洒,农药,,,因为,螺旋桨,产生,的,风,是,下压,的,,,能,让,农药,打,到,植被,的,根,底部,,,让,植被,更,容易,吸收

5.提取关键词

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

  1. impory jieba
  2. ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
  3. strs = jieba.analyse.extract_tags(sentence=ori, # 待提取原文
  4. topK=20, # 返回几个TF/IDF权重最大的关键词,默认为20
  5. withWeight=True, # 是否一并返回关键词的权重值,默认为False
  6. allowPOS=()) # 仅包括指定词性的词,默认为空
  7. print('关键词及权重为:')
  8. for (k, v) in strs:
  9. print(k, v)
  10. ************************************
  11. 输出结果为:
  12. 关键词及权重为:
  13. 农药 0.8217097884639999
  14. 植被 0.719015454252
  15. 四轴 0.597738375145
  16. 植保 0.591061805515
  17. 喷嘴 0.5302420393
  18. 下压 0.506973876815
  19. 喷洒 0.503601812775
  20. 无人机 0.48260912049650007
  21. 螺旋桨 0.443186252478
  22. 底部 0.3419243009845
  23. 带有 0.33062166254799996
  24. 吸收 0.311675969833
  25. 四个 0.306925352242
  26. 容易 0.270697183402
  27. 产生 0.2270312503385
  28. 因为 0.2024189068105
  29. 这种 0.19852254011249998
  30. 主要 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参数不能为空,否则会得到空值

  1. import jieba.analyse
  2. ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
  3. strs = jieba.analyse.textrank(sentence=ori, # 待提取原文
  4. topK=20, # 返回几个TF/IDF权重最大的关键词,默认为20
  5. withWeight=True, # 是否一并返回关键词的权重值,默认为False
  6. allowPOS=('ns', 'n', 'vn', 'v')) # 仅包括指定词性的词,默认过滤词性
  7. print('关键词及权重为:')
  8. for (k, v) in strs:
  9. print(k, v)
  10. *********************************************
  11. 输出结果:
  12. 关键词及权重为:
  13. 螺旋桨 1.0
  14. 农药 0.8759898646172835
  15. 产生 0.7867742915818781
  16. 喷洒 0.6996158154963905
  17. 风是 0.5973042098678957
  18. 下压 0.590317791482311
  19. 喷嘴 0.5844892605660431
  20. 植被 0.5674678333270774
  21. 带有 0.3326323546342714
  22. 吸收 0.32263772112456274

6.词性标注:

  1. import jieba.posseg as pseg
  2. ori = '这种是四轴无人机植保机,带有四个喷嘴,主要是喷洒农药,因为螺旋桨产生的风是下压的,能让农药打到植被的根底部,让植被更容易吸收'
  3. words = pseg.cut(ori)
  4. for word, flag in words:
  5. print(word, flag)
  6. **********************************************
  7. 输出结果为:
  8. 这种 r
  9. 是 v
  10. 四 m
  11. 轴 n
  12. 无人机 l
  13. 植保 nr
  14. 机 n
  15. , x
  16. 带有 v
  17. 四个 m
  18. 喷嘴 v
  19. , x
  20. 主要 b
  21. 是 v
  22. 喷洒 v
  23. 农药 n
  24. , x
  25. 因为 c
  26. 螺旋桨 n
  27. 产生 n
  28. 的 uj
  29. 风是 n
  30. 下压 v
  31. 的 uj
  32. , x
  33. 能 v
  34. 让 v
  35. 农药 n
  36. 打 v
  37. 到 v
  38. 植被 n
  39. 的 uj
  40. 根 a
  41. 底部 f
  42. , x
  43. 让 v
  44. 植被 n
  45. 更 d
  46. 容易 a
  47. 吸收 v

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

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

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/348437
推荐阅读
相关标签
  

闽ICP备14008679号