python 标签云_Python中文标签云之pytagcloud
本文讨论如何使用python的 pytagcloud 模块制作中文标签云图片和html文件。 如果你只是为了搜索到如何用python制作中文标签云,请跳过缘起和爬取文本数据部分从 标签云部分 看起: 缘起 学习scrapy,顺便就拿byr做了实验,异步强大的吞吐能力看的目瞪口呆。
本文讨论如何使用python的pytagcloud模块制作中文标签云图片和html文件。
如果你只是为了搜索到如何用python制作中文标签云,请跳过缘起和爬取文本数据部分从标签云部分看起:
缘起
学习scrapy,顺便就拿byr做了实验,异步强大的吞吐能力看的目瞪口呆。看到scrapy官网说到scrapy就是抽取网页中的元数据用以数据分析等作用,想了想就做做版面标签云分析吧。
另一方面,R语言课上老师讲到文本分析,R语言那些包对中文的支持真是不错。为什么Python没有支持中文的包呢?我试着搜索了下,都是提问如何使用的而没有任何具体解决方案。不由得感慨还是R的社区在文本分析领域活跃。
爬取文本数据
首先要获取生成标签云的原始数据。什么都行,直接拿篇中文文章都可以,不过我这里是爬取byr论坛某些板块的标题数据。
scrapy从网页抽取数据的能力相当强大,我在这里第一次体验到了xpath的方便之处,从此,即使是一些简单的网页任务也会用lxml来使用xpath。
在firebug里简单分析下,然后一页一页地请求网页然后抽取标题。再合成一个单独的文本。
标签云部分
需要以下先决条件:
确保安装pytagcloud,pip会顺便帮你帮它的依赖都装上
pip install --user pytagcloud
准备一个中文字体文件比如simhei.ttf
安装中文分词模块jieba
pip install --user jieba
然后,为了生成中文标签云,我们要分几步:
首先,把你的文本进行分词,并生成一个以单词为键以单词出现频数为值的字典。顺便去掉没有意义的词语比如“的”,“一个”这种。
wg = jieba.cut(YOUR_TEXT, cut_all=True)
wd = {}
nonsense = [u"一下", u"什么", u"一个"]
for w in wg:
if len(w) < 2:
continue
elif w in nonsense:
continue
try:
str(w)
continue
except:
if w not in wd:
wd[w] = 1
else:
wd[w] += 1
其次,如果字典太大pytagcloud会报错:
IOError: unable to read font file '/home/reverland/.local/lib64/python2.7/site-packages/pytagcloud/fonts/simhei.ttf'
另外,一个标签云图片上也不需要太多词语。所以我们对词语出现频数排序,然后选取前50
from operator import itemgetter
swd = sorted(wd.iteritems(), key=itemgetter(1), reverse=True)
swd = swd[1:50]
接下来就可以参见pytagcloud再github主页上说明生成tag数据:
tags = make_tags(swd,
minsize=SIZE1,
maxsize=SIZE2,
colors=random.choice(COLOR_SCHEMES.values()))
但此时pytagcloud还不支持中文字体,我们需要添加一个中文字体。
然后把你准备好的中文字体文件simhei.ttf移动到~/.local/lib64/python2.7/site-packages/pytagcloud/fonts/下,并更改其下的fonts.json文件,比如在头部添加一条记录:
[
{
"name": "SimHei",
"ttf": "simhei.ttf",
"web": "none"
},
......
现在,生成标签云png图像:
create_tag_image(tags,
'tag_cloud.png',
background=(0, 0, 0, 255),
size=(900, 600),
fontname="SimHei")
你将在当前目录下发现一个名为tag_cloud.png的标签云图片:
注意:参数SIZE1和SIZE2可能需要反复试验才能找到合适的。
现在,继续讨论如何生成html格式的标签云,html格式的标签云不会出现图片中有横有竖的情况。更多细节参看pytagcloud在github上的源码中测试文件。
在我们已经通过make_tags生成标签数据之后,生成html数据:
data = create_html_data(tags,
size=(900, 600),
layout=3,
fontname="SimHei",
rectangular=False)
还要准备个模板文件来生成html文件,比如template.html,关键别忘了指定语言和编码让浏览器能正常识别:
PyTagCloud
body{
background-color: black;
}
a.tag{
font-family: 'SimHei', 'Sans';
text-decoration: none;
}
li.cnt{
overflow: hidden;
position: absolute;
display: block;
}
ul.cloud{
position: relative;
display: block;
width: ${width}px;
height: ${height}px;
overflow: hidden;
margin: 0;
padding: 0;
list-style: none;
}
$css
$tags
将其读入并转化为模板
from string import Template
with open(template_filename) as f:
html_template = Template(f.read())
准备填充进去内容的字典:
context = {}
tags_template = '
%(tag)s'
context['tags'] = ''.join([tags_template % link for link in data['links']])
context['width'] = data['size'][0]
context['height'] = data['size'][1]
context['css'] = "".join("a.%(cname)s{color:%(normal)s;}\
a.%(cname)s:hover{color:%(hover)s;}" %
{'cname': k,
'normal': v[0],
'hover': v[1]}
for k, v in data['css'].items())
得到要生成的html文件并写入:
html_text = html_template.substitute(context)
with open('tagcloud.html', 'w') as html_file:
html_file.write(html_text.encode('utf-8'))
在当前目录你会得到一个名为tagcloud.html的文件,用浏览器打开如下:
That’s all. 有兴趣的同学可以自行封装以便自己使用。
可能永远不会实现的碎碎念
大概不会有机会了
2014.1.29
利用热度和标题正文数据可以分析下什么样的帖子更容易被回复,试着用bayes方法看看。可以做做内容聚类,主题模型分析。
想起github上一本叫 Bayes Probablistic Programming for Hackers .不知道有空看没
python 标签云_Python中文标签云之pytagcloud相关推荐
- python词云_python词云
python词云[编辑] 概述 python词云是一种构建词云的方法,利用通用的编程语言Python来做词云,虽然不如专用工具便捷,但是适用范围很广,满足了不同人对词云的个性化需求. 一.Python ...
- python 词云_python词云-数据产品岗位描述的词云
目的: 对于数据产品岗位,需要什么样的技能才能胜任,针对这个小问题,爬取了boss直聘的岗位描述,进行词频统计,并画出词云,来看看到底数据产品需要什么样的技能.最重要用到的python的库是jieba ...
- python歌词分析_Python 词云分析周杰伦新歌《说好不哭》
周杰伦难得出新歌 ,最近终于推出了单曲<说好不哭>,然后直接把QQ音乐服务器干崩了,天王的实力可见一斑,QQ音乐还把这个当作 今天过年 看我公众号头像就知道是杰伦粉了 ,高中的时候开始喜欢 ...
- 爱心 python 词云_Python词云
from PIL import Image from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot ...
- python星空代码_python与云星空Web API
大家都知道,云星空是支持Web API的.在云社区搜查 Python .API 两个关键词,就会出现相应的显示如下. 感谢Cand,给我们提供了这么好的内容. 我这段时间是做数据迁移的,把WISE数据 ...
- 爱心 python 词云_爱心 python 词云_python 词云
最近由于大屏项目需要生成一个词云所以这边做个记录 demo.py下: from os import path import chnSegment import plotWordcloud if __n ...
- 爱心 python 词云_python 词云
最近由于大屏项目需要生成一个词云所以这边做个记录 demo.py下: from os import path import chnSegment import plotWordcloud if __n ...
- python punctuation_经验拾忆(纯手工)=gt; Python基本数据类型_Python - UCloud云社区...
数据结构 可变类型与不可变类型(重头戏) 基操: 可变类型:[], {} # 可增删改 查 不可变类型: int float str () # 无法增删改, 只可查 升操: + 与 += 的区别: 也 ...
- python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例
本文实例讲述了python实现的批量分析xml标签中各个类别个数功能.分享给大家供大家参考,具体如下: 文章目录 需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码: # -*- co ...
- python标签打印_Python 实现自动完成A4标签排版打印功能
老婆大人让俺帮她通过Excel生成百人的准考证,她们学校打算来一次高考模拟.由于高考改革,每个学生的考试科目不一样,需要自动生成一下. 我一个程序员平时很少用到Excel,自己也不打算深入研究这个软件 ...
最新文章
- python实现希尔排序
- Python网络编程—(TCP、UDP区别)
- 红黑树(二)之 C语言的实现
- C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻
- 中台生态的形成:全面解读技术、研发、移动中台建设
- mysql数据库简单语句
- 2021-2025年中国住宅安全行业市场供需与战略研究报告
- 杨国勋:云计算颠覆现有市场和产业格局
- java继承 值_java继承
- 基于SSM框架的新闻管理系统
- linux如何设置显示器亮度调节软件,使用软件调节Ubuntu的屏幕亮度
- 苹果手机来电归属地_手机号码归属地能否取消?
- 【华人学者风采】忻获麟 加州大学欧文分校
- spell拼音码的写法及语句
- 【笔记------STM32】高级定时器TIM1,CH3N输出PWM的示例
- win10系统服务器异常,win10提示内部服务器错误500如何解决-解决win10内部服务器错误500的方法 - 河东软件园...
- Android 开源项目分类汇总 APP功能汇总
- Win7桌面显示音乐波动 - 音频频谱分析仪
- eclipse中输出时出现中文乱码的问题
- java正常运行但javac报错
热门文章
- 读《断舍离》山下英子
- 今日恐慌与贪婪指数为10 恐慌程度有所上升
- 【机器学习】课程设计布置:某闯关类手游用户流失预测
- Verilog 按键消抖的一些分析和想法
- 计算机语言里的堆栈是什么意思,汇编语言中的堆栈是什么?
- 2022-11-18 mysql列存储引擎-assert failed on i < m_idx.size() at rc_attr.h:342-问题分析
- PCIe Receiver内部恢复时钟与本地时钟
- bzoj1779 [Usaco2010 Hol]Cowwar 奶牛战争(网络流)
- matlab计算六面体的体积,六面体单元体积坐标方法-工程力学-清华大学.PDF
- Serverless实战——2分钟,教你用Serverless每天给女朋友自动发土味情话