基于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中Inf与Nan的判断问题详解
Feb 08 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Python批量更改文件名的实现方法
Oct 29 Python
python enumerate函数的使用方法总结
Nov 15 Python
Python enumerate索引迭代代码解析
Jan 19 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
python模拟实现分发扑克牌
Apr 22 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 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
php中cookie的作用域
2008/03/27 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
js post提交调用方法
2014/02/12 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
js面向对象的写法
2016/02/19 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
Move.js入门
2017/02/08 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python爬取成语接龙类网站
2018/10/19 Python
python设置环境变量的原因和方法
2019/06/24 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
Python中qutip用法示例详解
2020/10/02 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
公司市场部岗位职责
2013/12/02 职场文书
策划总监岗位职责
2014/02/16 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
创先争优标语
2014/06/27 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python