本文讨论如何使用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相关推荐

  1. python词云_python词云

    python词云[编辑] 概述 python词云是一种构建词云的方法,利用通用的编程语言Python来做词云,虽然不如专用工具便捷,但是适用范围很广,满足了不同人对词云的个性化需求. 一.Python ...

  2. python 词云_python词云-数据产品岗位描述的词云

    目的: 对于数据产品岗位,需要什么样的技能才能胜任,针对这个小问题,爬取了boss直聘的岗位描述,进行词频统计,并画出词云,来看看到底数据产品需要什么样的技能.最重要用到的python的库是jieba ...

  3. python歌词分析_Python 词云分析周杰伦新歌《说好不哭》

    周杰伦难得出新歌 ,最近终于推出了单曲<说好不哭>,然后直接把QQ音乐服务器干崩了,天王的实力可见一斑,QQ音乐还把这个当作 今天过年 看我公众号头像就知道是杰伦粉了 ,高中的时候开始喜欢 ...

  4. 爱心 python 词云_Python词云

    from PIL import Image from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot ...

  5. python星空代码_python与云星空Web API

    大家都知道,云星空是支持Web API的.在云社区搜查 Python .API 两个关键词,就会出现相应的显示如下. 感谢Cand,给我们提供了这么好的内容. 我这段时间是做数据迁移的,把WISE数据 ...

  6. 爱心 python 词云_爱心 python 词云_python 词云

    最近由于大屏项目需要生成一个词云所以这边做个记录 demo.py下: from os import path import chnSegment import plotWordcloud if __n ...

  7. 爱心 python 词云_python 词云

    最近由于大屏项目需要生成一个词云所以这边做个记录 demo.py下: from os import path import chnSegment import plotWordcloud if __n ...

  8. python punctuation_经验拾忆(纯手工)=gt; Python基本数据类型_Python - UCloud云社区...

    数据结构 可变类型与不可变类型(重头戏) 基操: 可变类型:[], {} # 可增删改 查 不可变类型: int float str () # 无法增删改, 只可查 升操: + 与 += 的区别: 也 ...

  9. python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例

    本文实例讲述了python实现的批量分析xml标签中各个类别个数功能.分享给大家供大家参考,具体如下: 文章目录 需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码: # -*- co ...

  10. python标签打印_Python 实现自动完成A4标签排版打印功能

    老婆大人让俺帮她通过Excel生成百人的准考证,她们学校打算来一次高考模拟.由于高考改革,每个学生的考试科目不一样,需要自动生成一下. 我一个程序员平时很少用到Excel,自己也不打算深入研究这个软件 ...

最新文章

  1. python实现希尔排序
  2. Python网络编程—(TCP、UDP区别)
  3. 红黑树(二)之 C语言的实现
  4. C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻
  5. 中台生态的形成:全面解读技术、研发、移动中台建设
  6. mysql数据库简单语句
  7. 2021-2025年中国住宅安全行业市场供需与战略研究报告
  8. 杨国勋:云计算颠覆现有市场和产业格局
  9. java继承 值_java继承
  10. 基于SSM框架的新闻管理系统
  11. linux如何设置显示器亮度调节软件,使用软件调节Ubuntu的屏幕亮度
  12. 苹果手机来电归属地_手机号码归属地能否取消?
  13. 【华人学者风采】忻获麟 加州大学欧文分校
  14. spell拼音码的写法及语句
  15. 【笔记------STM32】高级定时器TIM1,CH3N输出PWM的示例
  16. win10系统服务器异常,win10提示内部服务器错误500如何解决-解决win10内部服务器错误500的方法 - 河东软件园...
  17. Android 开源项目分类汇总 APP功能汇总
  18. Win7桌面显示音乐波动 - 音频频谱分析仪
  19. eclipse中输出时出现中文乱码的问题
  20. java正常运行但javac报错

热门文章

  1. 读《断舍离》山下英子
  2. 今日恐慌与贪婪指数为10 恐慌程度有所上升
  3. 【机器学习】课程设计布置:某闯关类手游用户流失预测
  4. Verilog 按键消抖的一些分析和想法
  5. 计算机语言里的堆栈是什么意思,汇编语言中的堆栈是什么?
  6. 2022-11-18 mysql列存储引擎-assert failed on i < m_idx.size() at rc_attr.h:342-问题分析
  7. PCIe Receiver内部恢复时钟与本地时钟
  8. bzoj1779 [Usaco2010 Hol]Cowwar 奶牛战争(网络流)
  9. matlab计算六面体的体积,六面体单元体积坐标方法-工程力学-清华大学.PDF
  10. Serverless实战——2分钟,教你用Serverless每天给女朋友自动发土味情话