zoukankan      html  css  js  c++  java
  • python词频统计,生成词云

      本篇博客介绍2个第三方库,中文分词库jieba和词云库WordCloud,我们将完成三个例子:

      统计英文词汇频率

      统计中文文本词汇频率使用jieba库

      生成词云

      在正式开始之前,我们先安装两个第三方库:中文分词库jieba和词云库WordCloud

      

    在这里插入图片描述

      统计英文词汇频率

      英文词汇统计十分简单,因为每个单词之间都是用空格分开的的,当然也有一些特殊模号,我们将对整个文本进行噪音处理,然后将其分割成单词,存入字典中,再给词汇按照频率排序,步骤如下:

      从文件流 中读取一段全英文文本

      将文本用lower()归一化成小写形式

      将文本中的特殊符号:;<>"~!@#$%^&*()-+[]|{}/*.,?过滤,替换成空格for ch in ';<>"~!@#$%^&*()-+[]|{}/*.,?':replace

      将文本split,划分成单个单词,返回一个列表

      遍历这个列表,按照单词=>出现次存入字典中:counts[x]=counts.get(x,0)+1

      使用items()返回一个列表,给列表排序

      格式化输出这个列表

      代码如下:

      #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库,我们要开始统计词频了,如何统计?步骤和统计英文相似,不过有了jieba的加持,这变得更为简单:

      从文件流 中读取一段全中文文本

      直接使用jieba.lcut(txt)将文本切分,返回一个列表

      当然这个列表中包含了字符,我们可以直接在遍历过程中不统计len=1的字符

      遍历这个列表,按照单词=>出现次存入字典中:counts[x]=counts.get(x,0)+1

      使用items()返回一个列表,给列表排序

      格式化输出这个列表

      代码如下:

      #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])

      参数属性:郑州妇科哪家好 http://www.zzkdfk.com/

      函数  描述  举例

      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)

      wordcloud根据空格来区分单词,并且会自动过滤符号

      代码如下:(根据QQ消息记录,过滤掉头衔和@后生成词云)

      #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()

  • 相关阅读:
    Python (一)Tkinter窗口组件:Label
    Python (八)Tkinter窗口组件:Scrollbar
    Python (四)Tkinter窗口组件:Radiobutton
    Python (五)Tkinter窗口组件:LabelFrame
    Python (三)Tkinter窗口组件:Checkbutton
    Scrapy安装及相关知识点概括
    Python (九)Tkinter窗口组件:Scale
    Python (六)Tkinter窗口组件:Entry
    电脑通过蓝牙适配器连接手机与蓝牙耳机之经验
    Noi2018 归途
  • 原文地址:https://www.cnblogs.com/djw12333/p/12455385.html
Copyright © 2011-2022 走看看