基于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回调函数的使用方法
Jan 23 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python实现Youku视频批量下载功能
Mar 14 Python
python学习教程之使用py2exe打包
Sep 24 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
PyCharm安装Markdown插件的两种方法
Jun 24 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 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对数组排序的简单实例
2013/12/25 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
php微信支付接口开发程序
2016/08/02 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
javascript Prototype 对象扩展
2009/05/15 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
js创建数组的简单方法
2016/07/27 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python实现的rsa加密算法详解
2018/01/24 Python
python3.7 sys模块的具体使用
2019/07/22 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
《会走路的树》教后反思
2014/04/19 职场文书
法人授权委托书
2014/09/16 职场文书
推荐信范文大全
2015/03/27 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL