转载地址:https://zhuanlan.zhihu.com/p/20432734
工具

Python 2.7 (前几天试了试 Scrapy 所以用的 py2 。血泪的教训告诉我们能用 py3 千万别用 py2 ,编码问题累死人)

jieba 结巴分词 fxsjy/jieba · GitHub

pytagcloud 词云生成 atizo/PyTagCloud · GitHub

安装过程应该没什么坑,不像 Scrapy 光安装都能写一篇出来。自行补充依赖就好。

Step 1 爬虫抓取文本

这个阶段比较简单。虽然我欠了半年的爬虫系列一直没有写,但是抓个贴子标题都不涉及模拟登陆,对入门的人应该问题不大。随便改了一下以前的代码就跑出来了。

# -*- coding: utf-8 -*-

import requests
import re
import os
import codecs def get_title(url):
s = requests.session()
h = s.get(url)
html = h.content.decode('utf-8')
#print html qurl = r'<a href="forum.*? class="s xst">(.*?)</a>'
qurllist = re.findall(qurl,html)
#print qurllist for each in qurllist:
f = codecs.open("result.txt", 'a', 'utf-8')
f.write(each+'\n')
print each
#f.flush()
f.close() for i in range(1,1000):
url = 'http://rs.xidian.edu.cn/forum.php?mod=forumdisplay&fid=72&page='+str(i)
get_title(url)

值得注意的还是编码问题,用 py3 的可以忽略。

Step 2 中文分词,提取关键词

jieba 的分词效果还是比较理想的。不过我在统计词频的时候一时没想起什么太好的解决办法,加上编码问题把我烦的够呛。于是偷懒地选择了 jieba 自带的提取关键词并给出权重的功能。

详见 jieba/extract_tags.py at master · fxsjy/jieba · GitHub

import sys
sys.path.append('../') import jieba
import jieba.analyse
from optparse import OptionParser USAGE = "usage: python extract_tags_with_weight.py [file name] -k [top k] -w [with weight=1 or 0]" parser = OptionParser(USAGE)
parser.add_option("-k", dest="topK")
parser.add_option("-w", dest="withWeight")
opt, args = parser.parse_args() if len(args) < 1:
print(USAGE)
sys.exit(1) file_name = args[0] if opt.topK is None:
topK = 10
else:
topK = int(opt.topK) if opt.withWeight is None:
withWeight = False
else:
if int(opt.withWeight) is 1:
withWeight = True
else:
withWeight = False content = open(file_name, 'rb').read() tags = jieba.analyse.extract_tags(content, topK=topK, withWeight=withWeight) if withWeight is True:
for tag in tags:
print("tag: %s\t\t weight: %f" % (tag[0],tag[1]))
else:
print(",".join(tags))

需要命令行运行。

先 cd 到目录,然后使用命令

python extract_tags_with_weight.py [file name] -k [top k] -w [with weight=1 or 0]

其中 -k 后输入关键词个数 -w 选择是否显示权重。如图:(具体的文本和结果我后面打包发一下,就不贴了)

说明:
其实标准的过程应该是分词以后统计词频,生成 k-v 的 Python 字典然后交由 pytagcloud 生成词云。由于我也是刚接触分词这块,不太熟悉,统计词频时力不从心,所以直接用了现成的关键词提取。
另外由于生成词云时需要的格式为 Python 字典(k-v),我自己在中间用 Notepad++ 和 Excel 做了一些文本上的预处理,这方面就八仙过海各显神通了。
还有,我使用了默认词典,没有自定义内容(jieba 是可以自定义词典的),所以一些词在提取时出现偏差,比如"新校区"、"老校区"就全部提成了"校区",X号楼只保留下来了"号楼"。另外我没有做词性筛选,导致许多无意义副词出现在结果里,后面生成词云时自己手动去掉了。

Step 3 生成词云

关于 pytagcloud ,搜到的唯一一篇比较有价值的文章就是Python中文标签云之pytagcloud 更多的还是要参考官方示例 atizo/PyTagCloud · GitHub 。我也没把功能全试完,大家可以自己向深处挖掘。

# -*- coding: utf-8 -*-
import codecs
import random
from pytagcloud import create_tag_image, create_html_data, make_tags, \
LAYOUT_HORIZONTAL, LAYOUTS
from pytagcloud.colors import COLOR_SCHEMES
from pytagcloud.lang.counter import get_tag_counts wd = {} fp=codecs.open("rsa.txt", "r",'utf-8'); alllines=fp.readlines(); fp.close(); for eachline in alllines:
line = eachline.split(' ')
#print eachline,
wd[line[0]] = int(line[1])
print wd from operator import itemgetter
swd = sorted(wd.iteritems(), key=itemgetter(1), reverse=True)
tags = make_tags(swd,minsize = 50, maxsize = 240,colors=random.choice(COLOR_SCHEMES.values()))
create_tag_image(tags, 'keyword_tag_cloud4.png', background=(0, 0, 0, 255),
size=(2400, 1000),layout=LAYOUT_HORIZONTAL,
fontname="SimHei")

输出结果如图。

补充:使用 pytagcloud 一定要记得添加中文字体并修改其配置文件,具体方法:
准备一个 ttf 中文字体,如 simhei.ttf ,将其移动到 C:\Users\~\AppData\Roaming\Python\Python27\site-packages\pytagcloud\fonts
并修改该文件夹下的 fonts.json 文件,添加相应的字体记录,如

{

"name": "SimHei",

"ttf": "simhei.ttf",

"web": "none"

},

输出结果还是比较有趣的,不过校外的人可能不熟悉。当然这本身也只是个很入门的东西,算作娱乐吧。

代码部分原创的不多…很多是网上拼拼凑凑找的。但是 pytagcloud 相关的内容搜出来比较少,对中文支持也需要自己修改,有人要自己做的话最好用谷歌搜索,然后参考前几篇文章和官方示例自己尝试。

在此顺便吐槽百度一发,实在难用,百度搜来搜去的结果,远不如谷歌直击要害。当然英语好就更棒了,能直接读文档和看 stackoverflow 。

想要自己尝试的可以用我这次的文档,或者自己抓感兴趣的资料。

http://pan.baidu.com/s/1mhn4mN2

拓展的话,感兴趣的可以多尝试几款分词比较一下。具体的就不推荐了我也不了解,搜一下会有很多,功能很丰富,语义分析,情感倾向,都有,可玩性比较高吧。

另外有另一款 Python 下的词云生成器 amueller/word_cloud · GitHub 留作以后研究吧。另外过程中看文章时发现好多词频统计和标签云是用 R 做的,有机会可以学习一下。

噢对了, pytagcloud 支持直接生成 HTML 网页的标签云,官方 demo 里有,我这边没做,就不展示了。

Python pytagcloud 中文分词 生成标签云 系列(一)的更多相关文章

  1. python3生成标签云

    标签云是现在大数据里面最喜欢使用的一种展现方式,其中在python3下也能实现标签云的效果,贴图如下: -------------------进入正文--------------------- 首先要 ...

  2. Python word_cloud 样例 标签云系列(三)

    转载地址:https://zhuanlan.zhihu.com/p/20436642word_cloud/examples at master · amueller/word_cloud · GitH ...

  3. Python word_cloud 部分文档翻译 标签云系列(二)

    转载地址:https://zhuanlan.zhihu.com/p/20436581上文末尾提到 Python 下还有一款词云生成器.amueller/word_cloud · GitHub 可以直接 ...

  4. Python3+pdfminer+jieba+wordcloud+matplotlib生成词云(以深圳十三五规划纲要为例)

    一.各库功能说明 pdfminer----用于读取pdf文件的内容,python3安装pdfminer3k jieba----用于中文分词 wordcloud----用于生成词云 matplotlib ...

  5. WordPress彩色背景标签云实现

    网上有很多的这种效果,但是却几乎没有什么关于彩色背景标签云的教程,网上讲的基本都是让标签云的字体变成彩色而不是背景,我觉得让字体变成彩色有的标签会看不清楚,而且也没有让背景变成彩色好看.先看看效果: ...

  6. 使用jieba和wordcloud进行中文分词并生成《悲伤逆流成河》词云

    因为词云有利于体现文本信息,所以我就将那天无聊时爬取的<悲伤逆流成河>的评论处理了一下,生成了词云. 关于爬取影评的爬虫大概长这个样子(实际上是没有爬完的): #!/usr/bin/env ...

  7. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  8. Python第三方库jieba(中文分词)入门与进阶(官方文档)

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式, ...

  9. Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_138 其实很早以前就想搞一套完备的标签云架构了,迫于没有时间(其实就是懒),一直就没有弄出来完整的代码,说到底标签对于网站来说还是 ...

随机推荐

  1. nginx 在ubuntu上使用笔记(绑定域名)

    1. 重启nginx的两个语句: sudo service nginx restart sudo nginx -s reload 2. nginx配置文件路径: etc/nginx/ 尤其是 site ...

  2. 北美跨境电商平台Wish透露未来一年在华规划

    9月12日,北美跨境电商平台Wish在深圳透露了未来一年在中国区的重点规划.Wish中国区总裁丁浩川表示,在下一阶段,Wish公司将继续围绕 提升平台流量. 加强品类支撑. 深化库存管理. 推进物流改 ...

  3. Performance — 前端性能监控利器

    Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到.最简单的办法是在window.onload事件中读取各种数据. 大 ...

  4. Team Member Introduction and Division of Work

    Team leader Name:宋天舒 Student Number:12061166 Interested In: Information safety. Responsible For: Des ...

  5. TeamWork#2,Week 5,Our Measurement of Contribution to the Team

    经过了今天下午将近两个小时的激烈讨论,我们最终确定了我们的团队贡献分的分配方式,这种方式是我们团队都能接受的. 我们的分配方式一定程度上借鉴了valve公司的队友评估原则,但是又不单单是这样.我们的分 ...

  6. VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库

    1.问题描述 原开发环境:Win7 64位旗舰版,VS2010,ThinkPad T460 出现问题:自己开发的MFC程序在WinXP环境下无法正常运行,弹框“无法定位程序输入点InitializeC ...

  7. 解决Cygwin编译cocos2dx 遇到的 error: 'UINT64_C' was not declared in this scope 问题

    环境工具:Win10.VS2013.cocos2d-x-2.2.6.Cygwin.ADT 问题来源:写了一个小游戏,VS2013上运行成功,就尝试着打包apk,项目导入到ADT里面,添加了cocos2 ...

  8. java的(PO,VO,TO,BO,DAO,POJO)类名包名解释

    VO:值对象.视图对象 PO:持久对象 QO:查询对象 DAO:数据访问对象——同时还有DAO模式 DTO:数据传输对象——同时还有DTO模式 PO:全称是persistant object持久对象最 ...

  9. WPF四则运算《《《《《策略模式

    设计思路:           因为之前没有用过WPF,听说和window窗体语法类似,就想着仿照之前的Window窗体做的,首先用三个textbox存储数据,添加一个comboBox,利用索引选择运 ...

  10. Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速

    题目链接: http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test2 se ...