本篇博客介绍2个第三方库,中文分词库jieba
和词云库WordCloud
,我们将完成三个例子:
在正式开始之前,我们先安装两个第三方库:中文分词库jieba
和词云库WordCloud
英文词汇统计十分简单,因为每个单词之间都是用空格分开的的,当然也有一些特殊模号,我们将对整个文本进行噪音处理,然后将其分割成单词,存入字典中,再给词汇按照频率排序,步骤如下:
;<>"~!@#$%^&*()-+[]|{}/*.,?
过滤,替换成空格for ch in ';<>"~!@#$%^&*()-+[]|{}/*.,?':replace
counts[x]=counts.get(x,0)+1
#coding=gbk
def getText(fileName):
f=open(fileName,'r')
txt=f.read().lower()
for ch in ';<>"~!@#$%^&*()-+[]|{}/*.,?':
txt=txt.replace(ch,' ')
f.close()
return txt
def comp(x):
return x[1]
def main():
txt=getText('English.txt')
words=txt.split()
counts={}
for x in words:
counts[x]=counts.get(x,0)+1
items=list(counts.items())
items.sort(key=comp,reverse=True)
for i in range(10):
key,value = items[i]
print("{0:<10} {1:>5}".format(key,value))
main()
you 32
to 19
the 10
who 10
those 9
have 8
and 8
that 6
want 6
make 6
中文语句和英文不一样,中文词汇之间没有空格而是连续的字段,如何对一段文本进行分词处理呢?我们可以安装第三方库jeiba,它使用中文词库的方式来识别词汇:依靠中文词库计算出某个词汇的概率,从而确定某段文字是不是词汇,我们只需要在cmd中打开script目录,输入pip install jieba
即可完成安装,常用函数如下:
函数 | 描述 | 举例 |
---|---|---|
jieba.lcut(s) | 精确模式,把文本精确地切分开,不存在冗余,返回一个列表类型的分词结果 | jieba.lcut('中国是一个伟大的国家') |
jieba.lcut(s,cut_all=True) | 全模式,把文本中所有可能的词汇都扫描出来,存在冗余,返回一个列表类型的分词结果 | jieba.lcut('中国是一个伟大的国家',cut_all=True) |
jieba.lcut_for_search(s) | 搜索引擎模式,在精确模式的基础上对长词进行切分,返回一个列表类型的分词结果 | jieba.lcut_for_search('中国是一个伟大的国家') |
jieba.add_word(s) | 将新词汇添加到词库中 | jieba.add_word(‘我爱python’) |
#coding=gbk
import jieba
def main():
print(jieba.lcut('中国是一个十分美丽的国家'))
print(jieba.lcut('中国是一个十分美丽的国家',cut_all=True))
print(jieba.lcut_for_search('中国是一个十分美丽的国家'))
main()
'''
['中国', '是', '一个', '十分', '美丽', '的', '国家']
['中国', '国是', '一个', '一个十', '十分', '美丽', '的', '国家']
['中国', '是', '一个', '十分', '美丽', '的', '国家']
'''
jieba.lcut(txt)
将文本切分,返回一个列表counts[x]=counts.get(x,0)+1
#coding=utf-8
import jieba
def getText(fileName):
f=open(fileName,'r',encoding='utf-8')
txt=f.read()
f.close()
return txt
def comp(x):
return x[1]
def main():
txt=getText('Chinese.txt')
words=jieba.lcut(txt)
counts={}
for x in words:
if len(x)==1:
continue
else:
counts[x]=counts.get(x,0)+1
items=list(counts.items())
items.sort(key=comp,reverse=True)
for i in range(10):
key,value = items[i]
print("{0:<10} {1:>5}".format(key,value))
main()
'''
可以 9
藏不住 4
如果 3
一天 3
我们 3
一个 3
男人 3
每个 3
那里 3
不怪 3
'''
生成词云我们是用的是wordcloud库,这个库可以将给定的一段文本按照空格镜像区分,按照频率显示在一张图片上,频率越高,字体越大,函数以及参数如下:
wordcloud.WordCloud([width][,height][,min_font_size],[,max_font_size][,font_path][,max_words][,stop_words][,mask])
函数 | 描述 | 举例 |
---|---|---|
width | 词云对象的宽度,默认400 | w=wordcloud.WorldCloud(width=800) |
height | 词云对象的高度,默认600 | w=wordcloud.WorldCloud(height=800) |
min_font_size | 指定词云中字体的最小号,默认为4号 | w=wordcloud.WorldCloud(min_font_size=10) |
max_font_size | 指定词云字体的最大号,默认根据高度自动调节 | w=wordcloud.WorldCloud(max_font_size=20) |
font_step | 指定词云中字体字号的步进间隔,默认为1 | w=wordcloud.WorldCloud(font_step=2) |
font_path | 指定字体文件的路径,默认为None | w=wordcloud.WorldCloud(font_path='msyh.ttc') |
max_words | 指定词云中的最大显示单词数量,默认200 | w=wordcloud.WorldCloud(max_words=100) |
stop_words | 指定词云中的排除词列表,列表中的词汇将不会出现在词云中 | w=wordcloud.WorldCloud(stop_words={"python"}) |
mask | 指定词云形状,默认为长方形,需要引用imread()函数 | >>> from scipy.misc import imread >>> mk=imread('pic.png') >>>w=wordcloud.WordCloud(mask=mk) |
background_color | 指定词云图片的背景颜色,默认为黑色 | w=wordcloud.WorldCloud(background_color='white') |
w.generate(txt)
w.to_file(fileName)
#coding=gbk
#coding=utf-8
import wordcloud
import jieba
def getText(fileName):
f=open(fileName,'r',encoding='gbk')
txt=''
for line in f:
if ('【' in line) or ('】' in line) or ('@' in line):continue
else:txt+=line
f.close()
txt=' '.join(jieba.lcut(txt))
return txt
def main():
txt=getText('test.txt')
w=wordcloud.WordCloud(font_path='msyh.ttc',width=800,height=600,max_words=40,font_step=3)
w.generate(txt)
w.to_file('wordcloud3.png')
print('make wordCloud successfully!')
main()