金伟的python学习笔记--分词与词云

python金伟的学习笔记


用学习强国部分题库制作的词云.jpeg
  1. 分词技术(jieba分词)

  2. 安装:pip install jieba

  3. 算法介绍:

结巴中文分词涉及到的算法包括:

(1) 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG);

(2) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;

(3) 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。

  1. 分词模式:

  2. 精确模式:试图将句子最精确地切开,适合文本分析;

jieba.cut(text,cut_all=False)

  1. 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;

jieba.cut(text,cut_all=Ture)

  1. 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

jieba.cut_for_search(text)

import jieba# 全模式text = "我来到北京清华大学"seg_list = jieba.cut(text, cut_all=True)print(u"[全模式]: ", "/ ".join(seg_list))# 精确模式seg_list = jieba.cut(text, cut_all=False)print(u"[精确模式]: ", "/ ".join(seg_list))# 默认是精确模式seg_list = jieba.cut(text)print(u"[默认模式]: ", "/ ".join(seg_list))# 搜索引擎模式seg_list = jieba.cut_for_search(text)print(u"[搜索引擎模式]: ", "/ ".join(seg_list))
  1. 添加字典
jieba.load_userdict(file_name) #file_name为自定义词典的路径

字典的格式,后面的次数和词性可以省略

乾清宫 1 n黄琉璃瓦 1 n
  1. 去除停用词

比如“的”、“是”、“而且”、“但是”、”非常“等。这些字或词即被称为Stop Words(停用词)。

import jieba# 去除停用词stopwords = {}.fromkeys(['的', '包括', '等', '是'])text = "故宫的著名景点包括乾清宫、太和殿和午门等。其中乾清宫非常精美,午门是紫禁城的正门。"# 精确模式segs = jieba.cut(text, cut_all=False)final = ''for seg in segs:    if seg not in stopwords:            final += segprint (final)seg_list = jieba.cut(final, cut_all=False)print ("/ ".join(seg_list))
  1. 关键词提取

https://blog.csdn.net/qq_35531549/article/details/88909731

1、两种分词算法

基于jieba分词技术的关键词提取,在import的时候要注意:import jieba.analyse,而不是import jieba。

关键词提取主要分为两种算法:

  • 基于TF-IDF:jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

第一个参数:待提取关键词的文本

第二个参数:返回关键词的数量,重要性从高到低排序

第三个参数:是否同时返回每个关键词的权重#

第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词

  • 基于TextRank:jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’))

同样是四个参数,但allowPOS默认为('ns', 'n', 'vn', 'v')# 即仅提取地名、名词、动名词、动词

#coding:utf-8# 关键词提取import jieba.analyse# 字符串前面加u表示使用unicode编码content = '中国特色社会主义是我们党领导的伟大事业,全面推进党的建设新的伟大工程,是这一伟大事业取得胜利的关键所在。党坚强有力,事业才能兴旺发达,国家才能繁荣稳定,人民才能幸福安康。党的十八大以来,我们党坚持党要管党、从严治党,凝心聚力、直击积弊、扶正祛邪,党的建设开创新局面,党风政风呈现新气象。习近平总书记围绕从严管党治党提出一系列新的重要思想,为全面推进党的建设新的伟大工程进一步指明了方向。'# 第一个参数:待提取关键词的文本# 第二个参数:返回关键词的数量,重要性从高到低排序# 第三个参数:是否同时返回每个关键词的权重# 第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词keywords = jieba.analyse.extract_tags(content, topK=20, withWeight=True, allowPOS=())print("*" * 64)print("关键词提取,不过滤'ns', 'n', 'vn', 'v'","*"*30)print("*" * 64)# 访问提取结果for item in keywords:   # 分别为关键词和相应的权重   print(item[0], item[1])# 同样是四个参数,但allowPOS默认为('ns', 'n', 'vn', 'v')# 即仅提取地名、名词、动名词、动词keywords = jieba.analyse.textrank(content, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v'))print("*" * 64)print("关键词提取,过滤'ns', 'n', 'vn', 'v'","*"*30)print("*" * 64)# 访问提取结果for item in keywords:   # 分别为关键词和相应的权重   print(item[0], item[1])

2、词性标注

# 词性标注# 加载jieba.posseg并取个别名,方便调用import jieba.posseg as psegwords = pseg.cut("我爱北京天安门")print("词性标注","*" * 80)for word, flag in words:    # 格式化模版并传入参数    print('%s, %s' % (word, flag))
1\. 名词 (1个一类,7个二类,5个三类)n 名词nr 人名nr1 汉语姓氏nr2 汉语名字nrj 日语人名nrf 音译人名ns 地名nsf 音译地名nt 机构团体名nz 其它专名nl 名词性惯用语ng 名词性语素 2\. 时间词(1个一类,1个二类)t 时间词tg 时间词性语素 3\. 处所词(1个一类)s 处所词 (家中、门外、境内、西方……) 4\. 方位词(1个一类)f 方位词 5\. 动词(1个一类,9个二类)v 动词vd 副动词vn 名动词vshi 动词“是”vyou 动词“有”vf 趋向动词vx 形式动词vi 不及物动词(内动词)vl 动词性惯用语vg 动词性语素 6\. 形容词(1个一类,4个二类)a 形容词ad 副形词an 名形词ag 形容词性语素al 形容词性惯用语 7\. 区别词(1个一类,2个二类)b 区别词 (主要、整个、所有……)bl 区别词性惯用语 8\. 状态词(1个一类)z 状态词 9\. 代词(1个一类,4个二类,6个三类)r 代词rr 人称代词rz 指示代词rzt 时间指示代词rzs 处所指示代词rzv 谓词性指示代词ry 疑问代词ryt 时间疑问代词rys 处所疑问代词ryv 谓词性疑问代词rg 代词性语素 10\. 数词(1个一类,1个二类)m 数词mq 数量词 11\. 量词(1个一类,2个二类)q 量词qv 动量词qt 时量词 12\. 副词(1个一类)d 副词 13\. 介词(1个一类,2个二类)p 介词pba 介词“把”pbei 介词“被” 14\. 连词(1个一类,1个二类)c 连词cc 并列连词 15\. 助词(1个一类,15个二类)u 助词uzhe 着ule 了 喽uguo 过ude1 的 底ude2 地ude3 得usuo 所udeng 等 等等 云云uyy 一样 一般 似的 般udh 的话uls 来讲 来说 而言 说来uzhi 之ulian 连 (“连小学生都会”) 16\. 叹词(1个一类)e 叹词 17\. 语气词(1个一类)y 语气词(delete yg) 18\. 拟声词(1个一类)o 拟声词 19\. 前缀(1个一类)h 前缀 20\. 后缀(1个一类)k 后缀 21\. 字符串(1个一类,2个二类)x 字符串xx 非语素字xu 网址URL 22\. 标点符号(1个一类,16个二类)w 标点符号wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { wyz 左引号,全角:“ ‘ 『wyy 右引号,全角:” ’ 』wj 句号,全角:。ww 问号,全角:? 半角:?wt 叹号,全角:! 半角:!wd 逗号,全角:, 半角:,wf 分号,全角:; 半角: ;wn 顿号,全角:、wm 冒号,全角:: 半角: :ws 省略号,全角:…… …wp 破折号,全角:—— -- ——- 半角:--- ----wb 百分号千分号,全角:% ‰ 半角:%wh 单位符号,全角:¥ $ £ ° ℃ 半角:$
  1. 基于jieba词云

需要的模块:jieba wordcloud matplotlib以及jieba.analyse

  • txt文本
  • 字体(simhei.ttf)
  • 词云背景图片(背景色需要设置,与展现词云的形状有关)
import matplotlib.pyplot as pltimport jieba.analysefrom wordcloud import WordCloud#1.读取文档内容text = open(r'C:\Users\Administrator\Desktop\题库.txt','r',encoding='utf-8').read()#2.关键词提取cut_text =jieba.analyse.textrank(text,topK=50,withWeight=False,allowPOS=('ns','n','vn','v'))# print(type(cut_text))# print(next(cut_text))# print(next(cut_text))#3.以空格拼接起来result = " ".join(cut_text)# print(result)# 4.生成词云wc = WordCloud(    font_path='simhei.ttf',     #字体路劲    background_color='white',   #背景颜色    width=1000,    height=600,    max_font_size=50,            #字体大小    min_font_size=10,    mask=plt.imread(r'C:\Users\Administrator\Desktop\无标题2.jpg'),  #背景图片    max_words=50)wc.generate(result)wc.to_file('jielun.png')    #图片保存#5.显示图片plt.figure('jielun')   #图片显示的名字plt.imshow(wc)plt.axis('off')        #关闭坐标plt.show()

你可能感兴趣的:(金伟的python学习笔记--分词与词云)