转载地址: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 codecsdef 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 qurllistfor 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 OptionParserUSAGE = "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 = Trueelse:withWeight = Falsecontent = 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_countswd = {}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 wdfrom 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 里有,我这边没做,就不展示了。

转载于:https://www.cnblogs.com/Yiutto/p/5998262.html

Python pytagcloud 中文分词 生成标签云 系列(一)相关推荐

  1. Python 任意中文文本生成词云 最终版本

    前叙 利用下面的代码你将可以将任意中文文本生成词云,其分词部分由jieba,NLPIR2016两个部分组成,生成词语由worldcloud负责,默认会自动发现文本中的20个新词并添加到词库中,当然你也 ...

  2. python中文分词,生成标签云,生成指定形状图片标签云

    使用结巴分词 https://github.com/fxsjy/jieba 可以直接pip 安装 pip install jieba 主要看到这么一篇文章 https://zhuanlan.zhihu ...

  3. 使用Python做中文分词和绘制词云

    使用Python做中文分词和绘制词云 李小璐出轨云词图 作为一门编程语言,Python的编写简单,支持库强大,应用场景多,越来越多的人开始将它作为自己的编程入门语言. Python一个比较重要的场景是 ...

  4. python 标签_python3生成标签云

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

  5. Python + wordcloud + jieba 十分钟学会用任意中文文本生成词云

    前述 本文需要的两个Python类库  jieba:中文分词分词工具  wordcloud:Python下的词云生成工具 写作本篇文章用时一个小时半,阅读需要十分钟,读完该文章后你将学会如何将任意中文 ...

  6. 基于python3写的源码剖析_基于python3生成标签云代码解析

    这篇文章主要介绍了基于python3生成标签云代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 标签云是现在大数据里面最喜欢使用的一种展现方式 ...

  7. 用Python做中文分词和绘制词云图

    用Python做中文分词和绘制词云图 Python窗体布局 def __init__(self):self.root=Tk()self.root.wm_title('绘制词云')self.root.r ...

  8. Python实现中文分词--正向最大匹配和逆向最大匹配

    编译原理实验二:Python实现中文分词–正向最大匹配和逆向最大匹配 最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数 ...

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

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

最新文章

  1. 如何得到Mysql每个分组中的第N条记录
  2. 深入解析浏览器的幕后工作原理(四) DOM树
  3. Just h-index(主席树+二分)
  4. 密码学加密算法分类_密码学中的国际数据加密算法(IDEA)
  5. hive 创建访问用户_hive创建角色并赋权
  6. java ee 容器_javaee中web的四大容器简介
  7. 现在70岁左右的人算不算是老年人?
  8. 报表选型除了看开发难易,还要看运维省不省心
  9. Codecov后门事件验证分析
  10. linux主机慢的原因,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  11. html视图查看,视图.html · zhaohaihang/Semantic UI demo - Gitee.com
  12. 手把手整合SSM项目(附源码)
  13. 抓linux肉鸡教程视频,超简单的菜鸟网吧抓肉鸡教程
  14. linux安装Elasticsearch全文搜索引擎
  15. verilog 中的 log2
  16. 解决Oracle进入实例账号,练习表的问题
  17. 如何看待IT培训这件事情?IT培训出来的人都一无是处吗?
  18. 渐变色按钮功能按钮绘制C语言示例
  19. 【CICE-A7a】人身保险会计与财务(上)
  20. Mac下Sunny_Ngrok内网地址映射成外网

热门文章

  1. 漫画 | 如果程序员的妈是产品经理,她会如何逼你结婚?
  2. springBoot启动时让方法自动执行的几种实现方式
  3. 趣谈GC技术,解密垃圾回收的玄学理论(一)
  4. 终于有人把 Docker 讲清楚了,万字详解!
  5. 麻省理工开放官方课程项目!
  6. 十年AI谁“最能打”?AI 2000榜单:何恺明最佳论文“刷”状元,谷歌机构排名第一...
  7. 全新的AirPods Pro包邮送!
  8. 把你手机里的照片秒变3D!Facebook训练了一个CNN端到端系统
  9. 北大图灵班本科生吴克文获STOC 2020最佳论文奖
  10. 推荐收藏 | 算法工程师常见面试问题及相关资料汇总