python词频作图_Python 分词及词云绘图

支持三种分词模式:

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

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

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

关键词:HMM 隐马尔可夫模型

三种分词模式:

#-*- coding: utf-8 -*-

importjieba#jieba.initialize()

seg_list= jieba.cut("中华人民共和国万岁!", cut_all=False) #精确模式(默认)

print("|".join(seg_list))

seg_list= jieba.cut("中华人民共和国万岁!", cut_all=True) #全模式

print("|".join(seg_list))

seg_list= jieba.cut_for_search("中华人民共和国万岁!") #搜索引擎模式

print("|".join(seg_list))

结果:

中华人民共和国 | 万岁 | !

中华 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和 | 共和国 | 万岁 |  |

中华 | 华人 | 人民 | 共和 | 共和国 | 中华人民共和国 | 万岁 | !

结果可以直接保持为 list

seg_list = jieba.cut("中华人民共和国万岁!") #默认精确模式

print(seg_list) #此返回生成器

seg_list= jieba.lcut("中华人民共和国万岁!")print(seg_list)

seg_list= jieba.lcut_for_search ("中华人民共和国万岁!")print(seg_list)

结果:

['中华人民共和国', '万岁', '!']

['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '万岁', '!']

【自定义分词字典(属额外添加)】

默认分词器为 jieba.dt。可使用自定义字典,添加词库中没有的词,文本必须为 UTF-8 编码。词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开。

测试文件 dict.txt 中,我只添加一个单词 "和国":

jieba.load_userdict("C:/Users/huangzecheng/Desktop/dict.txt")

seg_list= jieba.cut("中华人民共和国万岁!", cut_all=True)#如全模式

print("|".join(seg_list))

结果:

中华 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和 | 共和国 | 和国 | 万岁 |  |

【添加删除分词】

加载的自定义词典,是与默认的一起定义分词的。也可以使用几个函数添加、删除、禁止某个词被划分。

add_word(word, freq=None, tag=None)

del_word(word)

suggest_freq(segment, tune=True)

jieba.add_word('中华人')print("|".join(jieba.cut("中华人民共和国万岁!", cut_all=True)))

结果:中华| 中华人 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和 | 共和国 | 和国 | 万岁 | |jieba.del_word('共和')print("|".join(jieba.cut("中华人民共和国万岁!", cut_all=True)))

结果:中华| 中华人 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和国 | 和国 | 万岁 | |jieba.add_word('共和')

jieba.suggest_freq('国万岁', tune=True)print("|".join(jieba.cut("中华人民共和国万岁!", cut_all=True)))

结果:中华| 中华人 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和国 | 和国 | 国万岁 | 万岁 | |

【使用最多的分词】

import jieba.analyse

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

sentence :为待提取的文本

topK :为返回几个 TF/IDF 权重最大的关键词,默认值为 20

withWeight :为是否一并返回关键词权重值,默认值为 False

allowPOS :仅包括指定词性的词,默认值为空,即不筛选

测试:去文本中出现次数最多的前5个字符

str = "topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20;"str= str + "withWeight 为是否一并返回关键词权重值,默认值为 False"str= str + "allowPOS 仅包括指定词性的词,默认值为空,即不筛选"str= str + "jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件"tags= jieba.analyse.extract_tags(str, topK=5)print("|".join(tags))

结果:默认值| TFIDF | idf | IDF | path

上面说过字典有3部分组成:词语、词频(可省略)、词性(可省略)。textrank可运行过滤不同词性。

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))

tags = jieba.analyse.textrank(str, topK=5, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))print("|".join(tags))

结果:权重| 关键词 | 词性 | 频率 | 新建

【取分词及词性】

words = jieba.posseg.cut("中华人民共和国万岁!")for word, flag inwords:print('%s %s' %(word, flag))

结果:

中华人民共和国 ns

万岁 m

! x

【取分词及起止位置】

words = jieba.tokenize("中华人民共和国万岁!")for w inwords:print("word %s\t\t start: %d \t\t end:%d" % (w[0],w[1],w[2]))

结果:

word 中华人民共和国 start: 0 end:7word 万岁 start:7 end:9word ! start:9 end:10

words = jieba.tokenize("中华人民共和国万岁!", mode='search') #搜索模式

for w inwords:print("word %s\t\t start: %d \t\t end:%d" % (w[0],w[1],w[2]))

结果:

word 中华 start: 0 end:2word 华人 start:1 end:3word 人民 start:2 end:4word 共和 start:4 end:6word 共和国 start:4 end:7word 中华人民共和国 start: 0 end:7word 万岁 start:7 end:9word ! start:9 end:10

简单示例:从 sql server 数据库中读取某个文本字段,分词并自定义绘图

#-*- coding: utf-8 -*-

importpymssqlimportjiebaimportjieba.analyseimportmatplotlib.pyplot as pltfrom wordcloud importWordCloudfrom scipy.misc importimread

host= "localhost"user= "kk"passwd= "kk"dbname= "hzc"conn=Nonetry:

conn=pymssql.connect(

host=host,

user=user,

password=passwd,

database=dbname

)

cur=conn.cursor()

cur.execute("select col from jieba;")

rows=cur.fetchall()

tagsall=u""

#tagsall = open('filepath.txt','r').read()

for row inrows:

tags= jieba.analyse.extract_tags(row[0], topK=20)

tagsjoin= u" ".join(tags)

tagsall= tagsall + " " +tagsjoin#print(tagsjoin)

#http://labfile.oss.aliyuncs.com/courses/756/DroidSansFallbackFull.ttf

wc_cfg =WordCloud(

font_path="D:/Python35/Tools/whl/DroidSansFallbackFull.ttf",#字体

mask= imread("D:/Python35/Tools/whl/bg.png"),#背景模板(只黑白图,黑的显示)

background_color="white", #背景色

max_words=1000, #最大词量

mode="RGBA", #透明底色(background_color不为空).默认rgb

width=500, #宽度

height=400, #高度

max_font_size=100 #字体大小

)

wc=wc_cfg.generate(tagsall)

plt.imshow(wc)

plt.axis("off")

plt.show()finally:ifconn:

conn.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值