基于python3生成标签云代码解析


Posted in Python onFebruary 18, 2020

这篇文章主要介绍了基于python3生成标签云代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

标签云是现在大数据里面最喜欢使用的一种展现方式,其中在python3下也能实现标签云的效果,贴图如下:

基于python3生成标签云代码解析

-------------------进入正文---------------------

首先要安装以下几个库:

#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
# http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze
# 万能仓库下载pygame
# pip3下载simplejson

还有最重要的库:

pip3 install pytagcloud

或者去官网下载:

https://pypi.python.org/pypi/pytagcloud/

安装完毕,利用官网的例子来做:

from pytagcloud import create_tag_image, make_tags
from pytagcloud.lang.counter import get_tag_counts

YOUR_TEXT = "A tag cloud is a visual representation for text data, typically\
used to depict keyword metadata on websites, or to visualize free form text."

tags = make_tags(get_tag_counts(YOUR_TEXT), maxsize=120)

create_tag_image(tags, 'cloud_large.png', size=(900, 600), fontname='Lobster')

果断报错:

Traceback (most recent call last):
 File "D:/code/pythonwork/Text.py", line 96, in <module>
  tags = make_tags(get_tag_counts(YOUR_TEXT), maxsize=120)
 File "C:\Python34\lib\site-packages\pytagcloud\lang\counter.py", line 25, in get_tag_counts
  return sorted(counted.iteritems(), key=itemgetter(1), reverse=True)
AttributeError: 'dict' object has no attribute 'iteritems'

看了发现问题出在库中的:

# counter.py
return sorted(counted.iteritems(), key=itemgetter(1), reverse=True)

原来是python3.4不支持写法:

在Python2.x中,items( )用于 返回一个字典的拷贝列表【Returns a copy of the list of all items (key/value pairs) in D】,占额外的内存。

iteritems() 用于返回本身字典列表操作后的迭代【Returns an iterator on all items(key/value pairs) in D】,不占用额外的内存。

Python 3.x 里面,iteritems() 和 viewitems() 这两个方法都已经废除了,而 items() 得到的结果是和 2.x 里面 viewitems() 一致的。在3.x 里 用items()替换iteritems() ,可以用于 for 来循环遍历。

但是当我换成:

# counter.py
return sorted(counted.items(), key=itemgetter(1), reverse=True)

发现运行并没有错误,但是没有生成标签云啊,一遍一遍打印出来,终于找到问题了:

from pytagcloud import create_tag_image

这个是为了生成一个元组的东西:

# counts =[('cloud', 3),
# ('words', 2),
# ('code', 1),
# ('word', 1),
# ('appear', 1)]

但是python3里面的items()是达不到这个效果的,所以我就自己写吧。

读取txt文件,将每一行都按照空格划分成一个个数组的元素:

arr = []
 file = open('../tagcloud/tag_file.txt', 'r')
 data = file.read().split('\r\n')
 for content in data:
  contents = validatecontent(content).split()
  for word in contents:
    arr.append(word)
['BAISC', 'Python', 'BASICA', 'GVBASIC', 'GWBASIC', 'Python', 'ETBASIC', 'QBASIC', 'Quick', 'Basic', 'Turbo', 'Basic', 'True', 'Python', 'java', 'Basic', 'Visual', 'Basic', 'Visual', 'Basic', 'Net', 'Power', 'Basic', 'Python', 'java', 'SQL', 'VB', 'Small', 'Basic', 'Free', 'Basic', 'DarkBASIC', 'VBScript', 'Visual', 'Basic', 'For', 'ApplicationsVBA', 'REALbasic', 'C', 'C', 'Turbo', 'C', 'Python', 'java', 'SQL', 'VB', 'PHP', 'HTML', 'Borland', 'C', 'C', 'Builder', 'CCLI', 'Python', 'java', 'ObjectiveC', 'C#', 'Microsoft', 'Visual', 'C', 'Pascal', 'Delphi', 'Turbo', 'Python', 'java', 'SQL', 'VB', 'PHP', 'HTML', 'Pascal', 'Object', 'Pascal', 'Free', 'Pascal', 'Lazarus', 'FORTRAN', 'MATLAB', 'Scilab', 'GNU', 'Octave', 'R', 'SPlus', 'Mathematica', 'Maple', 'Python', 'java', 'SQL', 'VB', 'PHP', 'HTML', 'Julia', 'xBaseClipper', 'Visual', 'FoxPro', 'SQLPLSQL', 'TSQL', 'SQLPSM', 'LINQ', 'Xquer', 'Lua', 'Python', 'java', 'SQL', 'VB', 'Perl', 'PHP', 'Python', 'Ruby', 'ASP', 'JSP', 'TclTk', 'VBScript', 'AppleScript', 'AAuto', 'ActionScript', 'DMDScript', 'ECMAScript', 'JavaScript', 'JScript', 'TypeScript', 'sh', 'bash', 'Python', 'java', 'SQL', 'VB', 'PHP', 'HTML', 'sed', 'awk', 'PowerShell', 'csh', 'tcsh', 'ksh', 'zsh', 'XMLSVG', 'XML', 'Schema', 'Python', 'java', 'XSLT', 'XHTML', 'MathML', 'XAML', 'SSML', 'SGML', 'HTML', 'Python', 'java', 'SQL', 'VB', 'Curl', 'SVG', 'XML', 'Schema', 'XSLT', 'XHTML', 'MathML', 'XAML', 'SSML', 'Java', 'Jython', 'JRuby', 'JScheme', 'Groovy', 'Kawa', 'Scala', 'Clojure', 'ALGOL', 'APLJ', 'Ada', 'Falcon', 'Forth', 'Io', 'MUMPS', 'PLI', 'PostScript', 'REXX', 'SAC', 'Self', 'Simula', 'Swift', 'IronPython', 'IronRuby', 'COBOL', 'Python', 'java', 'SQL', 'VB', 'PHP', 'HTML']

其中validatecontent是起初非法字符的函数:

# 去除内容中的非法字符 (Windows)
def validatecontent(content):
  # '/\:*?"<>|'
  rstr = r"[\/\\\:\*\?\"\<\>\|\.\*\+\-\(\)\"\'\(\)\!\?\“\”\,\。\;\:\{\}\{\}\=\%\*\~\·]"
  new_content = re.sub(rstr, "", content)
  return new_content

对每一个元素都来个计数:

from collections import Counter
counts = Counter(arr).items()
print(counts)

效果出来了:

dict_items([('For', 1), ('SQL', 8), ('JRuby', 1), ('Builder', 1), ('HTML', 6), ('LINQ', 1), ('BAISC', 1), ('BASICA', 1), ('PHP', 6), ('Octave', 1), ('csh', 1), ('PostScript', 1), ('awk', 1), ('Ruby', 1), ('AppleScript', 1), ('Object', 1), ('java', 11), ('TclTk', 1), ('Xquer', 1), ('ksh', 1), ('zsh', 1), ('ETBASIC', 1), ('AAuto', 1), ('Borland', 1), ('SVG', 1), ('Jython', 1), ('Simula', 1), ('IronPython', 1), ('Python', 14), ('Microsoft', 1), ('ActionScript', 1), ('XHTML', 2), ('REXX', 1), ('COBOL', 1), ('Scilab', 1), ('Ada', 1), ('Basic', 9), ('GVBASIC', 1), ('ECMAScript', 1), ('TypeScript', 1), ('Falcon', 1), ('Clojure', 1), ('ASP', 1), ('ALGOL', 1), ('XMLSVG', 1), ('GWBASIC', 1), ('VBScript', 2), ('CCLI', 1), ('Lazarus', 1), ('Julia', 1), ('JSP', 1), ('PowerShell', 1), ('IronRuby', 1), ('Power', 1), ('FORTRAN', 1), ('Self', 1), ('Perl', 1), ('Small', 1), ('FoxPro', 1), ('REALbasic', 1), ('GNU', 1), ('Mathematica', 1), ('True', 1), ('Visual', 5), ('JScheme', 1), ('Maple', 1), ('Quick', 1), ('Turbo', 3), ('SAC', 1), ('JScript', 1), ('APLJ', 1), ('sh', 1), ('Kawa', 1), ('Pascal', 4), ('TSQL', 1), ('SPlus', 1), ('C', 6), ('xBaseClipper', 1), ('tcsh', 1), ('SQLPSM', 1), ('ApplicationsVBA', 1), ('SSML', 2), ('R', 1), ('Groovy', 1), ('XSLT', 2), ('MUMPS', 1), ('bash', 1), ('DarkBASIC', 1), ('SGML', 1), ('XAML', 2), ('VB', 8), ('Curl', 1), ('Schema', 2), ('MATLAB', 1), ('MathML', 2), ('Lua', 1), ('Net', 1), ('ObjectiveC', 1), ('JavaScript', 1), ('Java', 1), ('Io', 1), ('Free', 2), ('Delphi', 1), ('sed', 1), ('XML', 2), ('Forth', 1), ('C#', 1), ('SQLPLSQL', 1), ('QBASIC', 1), ('DMDScript', 1), ('Swift', 1), ('Scala', 1), ('PLI', 1)])

最后直接代入进去就行了:

tags = make_tags(counts, maxsize=120)
 create_tag_image(tags, 'cloud_large.png', size=(900, 600), fontname='Lobster')

具体的修正需要自己慢慢去琢磨了,比如文字大小、图片大小、背景颜色等等。

到这里标签云是算完成了的,但是却是不支持中文,原因是没有合适的ttf字体文件,准备一个 ttf 中文字体,如MicrosoftYaHei.ttf ,将其移动到

# C:\Python34\Lib\site-packages\pytagcloud\fonts

接着就是更改fonts.json文件,按照样式添加类似于css的东西:

{
    "name": "MicrosoftYaHei",
    "ttf": "MicrosoftYaHei.ttf",
    "web": "none"
  }

注意前后的逗号就行。最后将这里的代码改一下:

create_tag_image(tags, 'cloud_large.png', size=(900, 600), fontname='MicrosoftYaHei')

运行,搞定!中文效果图:

基于python3生成标签云代码解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一篇不错的Python入门教程
Feb 08 Python
python两种遍历字典(dict)的方法比较
May 29 Python
对于Python的Django框架部署的一些建议
Apr 09 Python
Python制作简单的网页爬虫
Nov 22 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
Python中的变量与常量
Nov 11 Python
python3 字符串str和bytes相互转换
Mar 23 Python
基于Pytorch SSD模型分析
Feb 18 #Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 #Python
Python动态导入模块和反射机制详解
Feb 18 #Python
pytorch进行上采样的种类实例
Feb 18 #Python
new_zeros() pytorch版本的转换方式
Feb 18 #Python
对pytorch的函数中的group参数的作用介绍
Feb 18 #Python
基于python3实现倒叙字符串
Feb 18 #Python
You might like
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
vue的token刷新处理的方法
2018/07/17 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
C++的几个面试题附答案
2016/08/03 面试题
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
毕业生自荐书模版
2014/01/04 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
2015年老干部工作总结
2015/04/23 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL