基于python3生成标签云代码解析
这篇文章主要介绍了基于python3生成标签云代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
标签云是现在大数据里面最喜欢使用的一种展现方式,其中在python3下也能实现标签云的效果,贴图如下:
首先要安装以下几个库:
#!/usr/bin/python3.4 #-*-coding:utf-8-*- #http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze #万能仓库下载pygame #pip3下载simplejson
还有最重要的库:
pip3installpytagcloud
或者去官网下载:
https://pypi.python.org/pypi/pytagcloud/
安装完毕,利用官网的例子来做:
frompytagcloudimportcreate_tag_image,make_tags frompytagcloud.lang.counterimportget_tag_counts YOUR_TEXT="Atagcloudisavisualrepresentationfortextdata,typically\ usedtodepictkeywordmetadataonwebsites,ortovisualizefreeformtext." tags=make_tags(get_tag_counts(YOUR_TEXT),maxsize=120) create_tag_image(tags,'cloud_large.png',size=(900,600),fontname='Lobster')
果断报错:
Traceback(mostrecentcalllast): File"D:/code/pythonwork/Text.py",line96,intags=make_tags(get_tag_counts(YOUR_TEXT),maxsize=120) File"C:\Python34\lib\site-packages\pytagcloud\lang\counter.py",line25,inget_tag_counts returnsorted(counted.iteritems(),key=itemgetter(1),reverse=True) AttributeError:'dict'objecthasnoattribute'iteritems'
看了发现问题出在库中的:
#counter.py returnsorted(counted.iteritems(),key=itemgetter(1),reverse=True)
原来是python3.4不支持写法:
在Python2.x中,items()用于返回一个字典的拷贝列表【Returnsacopyofthelistofallitems(key/valuepairs)inD】,占额外的内存。
iteritems()用于返回本身字典列表操作后的迭代【Returnsaniteratoronallitems(key/valuepairs)inD】,不占用额外的内存。
Python3.x里面,iteritems()和viewitems()这两个方法都已经废除了,而items()得到的结果是和2.x里面viewitems()一致的。在3.x里用items()替换iteritems(),可以用于for来循环遍历。
但是当我换成:
#counter.py returnsorted(counted.items(),key=itemgetter(1),reverse=True)
发现运行并没有错误,但是没有生成标签云啊,一遍一遍打印出来,终于找到问题了:
frompytagcloudimportcreate_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') forcontentindata: contents=validatecontent(content).split() forwordincontents: 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) defvalidatecontent(content): #'/\:*?"<>|' rstr=r"[\/\\\:\*\?\"\<\>\|\.\*\+\-\(\)\"\'\(\)\!\?\“\”\,\。\;\:\{\}\{\}\=\%\*\~\·]" new_content=re.sub(rstr,"",content) returnnew_content
对每一个元素都来个计数:
fromcollectionsimportCounter 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')
运行,搞定!中文效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。