自然语言处理笔记-基础知识(中文分词)

jieba 中文分词

与英文等不同,中文的一句话中,词与词之间是没有空格分开的。而且自然语言处理是无法直接对整个句子进行分析的,所以要进行分词

jieba.cut() 接受三个参数

  • 需要分词的字符串
  • cut_all 是否采用全模式
  • HMM 是否使用 HMM 模型
import jieba
str_list = jieba.cut('我在学习自然语言处理')
print('/'.join(str_list))
# 全模式
str_list = jieba.cut('我在学习自然语言处理', cut_all = True)
print('/'.join(str_list))
我/在/学习/自然语言/处理
我/在/学习/自然/自然语言/语言/处理

jieba.cut_for_search() 该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。两个参数

  • 需要分词的字符串;
  • 是否使用 HMM 模型
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

jieba.lcut 以及 jieba.lcut_for_search 直接返回 list

str_list = jieba.lcut('我在学习自然语言处理')
print(str_list)
['我', '在', '学习', '自然语言', '处理']

添加自定义词典

有一些专有名词,公司名等,不希望被切分开。

# 如果数据过少,直接使用 jieba.add_word() 添加
str_list = jieba.lcut('李小福是创新办主任也是云计算方面的专家')
print('未添加之前:', str_list)

jieba.add_word('创新办', freq = None, tag = None)
jieba.add_word('云计算', freq = None, tag = None)

str_list = jieba.lcut('李小福是创新办主任也是云计算方面的专家')
print('添加之后:', str_list)

# 使用jieba.del_word()删除

# 如果词组过多可以使用jieba.load_userdict()加载用户自定义的词典
未添加之前: ['李小福', '是', '创新', '办', '主任', '也', '是', '云', '计算', '方面', '的', '专家']
添加之后: ['李小福', '是', '创新办', '主任', '也', '是', '云计算', '方面', '的', '专家']

用jieba.suggest_freq()可调节单个词语的司频,使其能(或不能)被分出来

str_list = jieba.cut('如果放到旧字典中将出错', HMM=False)
print('/'.join(str_list))
jieba.suggest_freq(('中', '将'), True)
str_list = jieba.cut('如果放到旧字典中将出错', HMM=False)
print('/'.join(str_list))
如果/放到/旧/字典/中将/出错
如果/放到/旧/字典/中/将/出错

关健词提取

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

TF-IDF 简单点说 比如‘的’,‘地’,‘得’这些词在分析语意时毫无意义,每个段中会出现很多次,如果在整个文本中也会出现多次,那么就会降低这些词的权重

jieba.analyse.extract_tags()
  • sentence 要提取的文本
  • topK 返回多少个权重最大的关键词 (默认值为20)
  • withWeight 是否同时返回关键词的权重 (默认值为False)
  • allowPOS 是否仅包括指定词性的词,如动词,名词等 (默认值为空)
# 对西游记进行关健词提取
import jieba.analyse as analyse
lines = open(u'西游记.txt').read()
print(' '.join(analyse.extract_tags(lines, topK=20, withWeight=False, allowPOS=())))
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/lm/g1tl9_317k38bh6pdrrg_2nr0000gn/T/jieba.cache
Loading model cost 0.581 seconds.
Prefix dict has been built succesfully.


行者 八戒 师父 三藏 大圣 唐僧 沙僧 菩萨 妖精 和尚 那怪 甚么 那里 长老 呆子 怎么 徒弟 不知 老孙 悟空

插图

# 雷音寺
from PIL import Image
from IPython.display import Image as IMG

path = 'lys.png'
display(Image.open(path))
lys.png

基于TextRank 算法的关键词抽取

TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘

lines = open(u'西游记.txt').read()
print(' '.join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns','n','vn','v'))))
行者 师父 八戒 三藏 大圣 菩萨 不知 只见 妖精 长老 国王 呆子 徒弟 却说 悟空 小妖 不见 不能 不得 出来

词性标注

  • 返回每个词的记性
import jieba.posseg as posseg
words = posseg.cut('我在学习自然语言处理')
for word , flag in words:
    print('%s %s' % (word, flag))
我 r
在 p
学习 v
自然语言 l
处理 v
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0 引言   jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性: 支持 3 种分词模...
    Gaius_Yao阅读 118,802评论 3 82
  • 在接下来的分词练习中将使用到四川大学公共管理学院的一篇新闻进行练习,文本如下: 为贯彻落实党的十九大精神,不断提升...
    nicokani阅读 5,081评论 0 4
  • 参考:Python 中文分词组件 jiabaPython中文分词 jieba 十五分钟入门与进阶jieba完整文档...
    领悟悟悟阅读 9,846评论 1 1
  • 注:参考文档 一、在线词云图工具# (1)、使用### 在正式使用jieba分词之前,首先尝试用在线分词工具来将自...
    DearIreneLi阅读 11,372评论 1 8
  • 运行项目遇到以下问题: 解决方案: 1.在清单文件增加代码: 2.在清单文件清单再加一句代码: 好了,重新运行解决...
    柴江朋阅读 9,339评论 4 2

友情链接更多精彩内容