Google Plus 文本提取与分析3

本文所有数据源自google+,全篇围绕五个方面来进行文本提取和分析,数据获取、中文分词、NLTK、特征词提取、文本相似度。此外,本文还涉及情感词分析,齐普夫定律等。摘要自动提取、意见挖掘、文本聚类、新闻分类等常规文本分析内容并不适合google+的数据集,因此本文没有涉及。

看点

03

NLTK

概述

斯坦福大学自然语言处理组是世界知名的NLP研究小组,他们提供了一系列开源的Java文本分析工具,包括分词器(Word Segmenter),词性标注工具(Part-Of-Speech Tagger),命名实体识别工具(Named Entity Recognizer),句法分析器(Parser)等,可喜的事,他们还为这些工具训练了相应的中文模型,支持中文文本处理。NLTK4是针对python的一个自然语言处理平台,在windows、mac、linux平台上通用,并且是开源免费的,国内好多项目都是在它基础上做的。 下面用nltk分析下抓到的数据。

import nltk

from bosonnlp import BosonNLP



nlp = BosonNLP('你自己的api_key')#将所有记录转化为一个词语数组tokens

contents='。'.join(all_content)

tokens=nlp.tag(contents)[0]['word']

text = nltk.Text(tokens)text.concordance("三星")#查看出现‘三星’的语句,可选参数包括语句数目和语句长度

'''
Displaying 4 of 4 matches:
 北京 市长 准备 如何 收场 ? 。 # 看 图 不 说话 1016 : 三星 手机 名不虚传 。 How to mess up # StarWars a
假 论文 , 那 就 是 丢脸 了 。 # 看 图 不 说话 0923 : 三星 一生 黑 http://cinacn.blogspot.com/2016/
 : 心里 想 说 没事 了 。 # 看 图 不 说话 0917 : 使用 三星 手机 的 后果 。 这个 错误 有点 大 了 。 看看 朝鲜 战争 大事记
 你们 开学 一次性 交 多少 钱 。 # 看 图 不 说话 0906 : 三星 手机 的 中东 版 。 舆情 监控 , 已经 是 大陆 媒界 不用 公开 
'''

text.collocations()#最搭配的用词

'''

Displaying 4 of 4 matches:
 北京 市长 准备 如何 收场 ? 。 # 看 图 不 说话 1016 : 三星 手机 名不虚传 。 How to mess up # StarWars a
假 论文 , 那 就 是 丢脸 了 。 # 看 图 不 说话 0923 : 三星 一生 黑 http://cinacn.blogspot.com/2016/
 : 心里 想 说 没事 了 。 # 看 图 不 说话 0917 : 使用 三星 手机 的 后果 。 这个 错误 有点 大 了 。 看看 朝鲜 战争 大事记
 你们 开学 一次性 交 多少 钱 。 # 看 图 不 说话 0906 : 三星 手机 的 中东 版 。 舆情 监控 , 已经 是 大陆 媒界 不用 公开 
'''

text.collocations()#最搭配的用词

'''

@Homebaby Wen; little pink; sounds cute; 核废料 处理厂; 诺贝尔 文学奖; 连云港 核废料;
创业者 越来越
'''

fdist = text.vocab()#{词1:词1出现的个数,词2:词2出现的个数,...}

print(fdist["大陆"])

print(fdist["老百姓"])

print(fdist["的"])

print(fdist["不"])

'''
25
27
1250
351
'''

print(len(tokens)) #总共的词数

print(len(fdist.keys())) #不重复词

print(fdist.freq('的'))#1250/27232

print(fdist.most_common(20))# 出现次数最大的前20个

'''
27232
6465
0.04590188014101058
[(',', 1651), ('的', 1250), ('。', 959), (':', 568), ('是', 495), ('了', 380), ('不', 351), ('”', 257), ('“', 255), ('#', 242), ('一', 222), ('就', 207), ('在', 200), ('有', 162), ('?', 150), ('你', 130), ('我', 129), ('这', 129), ('人', 127), ('都', 124)]
'''

nltk.download('stopwords')

'''
[nltk_data] Downloading package stopwords to /Users/Trucy/nltk_data...
[nltk_data]   Unzipping corpora/stopwords.zip.
然后在解压的停词目录中添加china文件,里面添加停词,这里用的哈工大停词库

'''

comm=list(zip(*fdist.most_common(100)))[0]#100个热词中非停词

print([w for w in comm if w not in nltk.corpus.stopwords.words('china')])

'''
['中国', '说', '国家', '毛', '微', '语录', '精选', '图', '说话', '中共', '日', '政府', '年', '爱国', '美国', '天', '钱', '荟萃', '段子', '里', '想']
'''

# 非url的长词语

print([w for w in fdist.keys() if len(w) > 12 and not w.startswith("http")])

'''
['@jianshenbiao', '@Jackstraw_PRC', '@Andrew19751110', '@boattractor_cj', '@_markhorton搞得后者不得不', '@Weaponmagazine-肖宁)', '@YE5MQ5Vtp2jlWX7', '@Menghuanlangqi2', '@szstupidcool', '@zhifangnvren', 'HappyBirthday', '@freedomandlaw', '@_mackhorton结果攻击了一个字母之差的无辜鬼佬', '@和菜头)——中国人能接受么?丝毫没有对他国的尊重', '@BattlerHenry', '@c338ki_selina', '@shangguanluan', '@zhanghui8964', '@fedsneighbor']
'''

相信你肯定听过二八原则,如果把所有的单词(字)放在一起看呢?会不会20%的词(字)占了80%的出现次数?答案是肯定的。

早在上个世纪30年代,就有人(Zipf)对此作出了研究,并给出了量化的表达——齐普夫定律(Zipf’s Law):一个词在一个有相当长度的语篇中的等级序号(该词在按出现次数排列的词表中的位置,他称之为rank,简称r)与该词的出现次数(他称为frequency,简称f)的乘积几乎是一个常数(constant,简称C)。用公式表示,就是 r × f = C 。(此处的C一般认为取0.1)。Zipf定律是文献计量学的重要定律之一,它和洛特卡定律、布拉德福定律一起被并称为文献计量学的三大定律。

我们直观地验证下,100个热词频度和排名的规律:

#前100热词统计

cocomm=list(zip(*fdist.most_common(400)))

totop=[(w,comm[1][i]) for i,w in enumerate(comm[0]) \

ifif w not in nltk.corpus.stopwords.words('china')]

dddd=list(zip(*top[:100]))

plplt.plot(range(1,101),dd[1],'-',linewidth=5,alpha=0.6)

plplt.xticks(arange(1,101,2),dd[0][::2],rotation=90)plt.xlabel('前100热词',fontsize='x-large')

plplt.ylabel('频数',fontsize='x-large')

plplt.title('前100热词统计',fontsize='x-large')

plplt.show()

很明显如果去拟合的话是反比例曲线,有兴趣的使用最小二乘法拟合下,看下c等于多少。同样可以看到,热词中涉及政治词汇比较多,实际上好多中文说说都涉及敏感词汇,这已经是我挑的不怎么敏感的了,万恶腐朽的google+,天朝早晚取缔你。

参考文献

  1. Russell, Matthew A. Mining the Social Web: Data Mining Facebook, Twitter, LinkedIn, Google+, GitHub, and More. O’Reilly Media, Inc. 2013.
  2. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容.http://www.cnblogs.com/zdz8207/p/python_learn_note_17.html ↩
  3. Beautiful Soup 4.2.0 文档.https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html ↩
  4. 11 款开放中文分词引擎评测.http://www.cnblogs.com/croso/p/5349517.html ↩
  5. Natural Language Toolkit.http://www.nltk.org/index.html ↩
  6. TF-IDF与余弦相似性的应用(一):自动提取关键词.http://www.ruanyifeng.com/blog/2013/03/tf-idf.html ↩

文末:文章来源机器学习和自然语言处理(ID:datathinks),作者:机器学习和自然语言处理。本公众号旨在技术传播与分享,未经授权不能转载发布。

原文发布于微信公众号 - 机器学习和自然语言处理(datathinks)

原文发表时间:2018-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的知识天地

用Python自动生成表情包?小学生都能学会的操作!

作为一个数据分析师,应该信奉一句话----"一图胜千言"。不过这里要说的并不是数据可视化,而是一款全民向的产品形态——表情包!!!!

9920
来自专栏落影的专栏

《音视频开发进阶指南》—— 读书笔记

前言 之前偶然看到一个PPT,是一些视频特效的讲解。首页如下: ? PPT解析了模糊镜像、电击效果、灵魂出窍、动态晕影等视频处理效果,最后推荐作者自己写的书: ...

83960
来自专栏量化投资与机器学习

【精选】破解波动性突破实盘系统

1、波动性突破实盘系统介绍 1.1 系统设计思想 波动性突破, 本身带有一定程度自适应市场的特点, 为趋势跟踪系统中的上品, 我们再加入时间清仓、 顺势下轿的...

38470
来自专栏美团技术团队

美团点评旅游搜索召回策略的演进

背景 美团点评作为最大的生活服务平台,有丰富的品类可供用户选择,因此搜索这个入口对各业务的重要性不言而喻,除了平台搜索外,业务搜索系统的质量和效果对用户体验、商...

851110
来自专栏华章科技

春招快到了,送你一份数据分析常见面试题

找了半年工作,面试了几个data science的职位,总结了一些常见的问题,在这儿抛砖引玉。

6710
来自专栏奇点大数据

遗传算法(1)

与其说遗传算法是一个算法,不如说是一种处理问题的思想方式更为恰当,因为遗传算法整个体系说来说去都是在说对于一种问题处理的思路和原则,而不是一个具体的代码编写过...

61970
来自专栏PPV课数据科学社区

“数学之美”系列二:谈谈中文分词

谈谈中文分词 --- 统计语言模型在中文处理中的一个应用 上回我们谈到利用统计语言模型进行语言处理,由于模型是建立在词的基础上的,对于中日韩等语言,首先...

34130
来自专栏大数据文摘

数学与美容:美国专利观光,用黄金分割为眉毛造型

17730
来自专栏专知

【LeetCode 122】关关刷题日记25-Best Time to Buy and Sell Stock II

关关的刷题日记 25 – Leetcode 122. Best Time to Buy and Sell Stock II 题目 Say you have an...

397100
来自专栏量化投资与机器学习

R语言构建追涨杀跌量化交易模型(附源代码)

作者 张丹(Conan) 来源 http://blog.fens.me Rquant前言最近有读者要求公众号推送几篇关于R语言量化投资的内容。今天推送第一篇。后...

618100

扫码关注云+社区

领取腾讯云代金券