python如何分析高频词_利用Python统计演讲高频词

article/2025/3/14 20:28:35

1月9日被誉为中国最牛的产品经理张小龙做了微信的年度演讲[1],引爆朋友圈。

1月10日采铜写了篇《张小龙四个小时的演讲没有讲什么?》[2],又引爆朋友圈。在现在几乎所有人张口就谈“认知升级”、“底层逻辑”等词的时代,这篇文章用数据阐述了张小龙在演讲想表达什么。我觉得特别好玩的是,有很多大家都在说的词,耳朵里听出老茧的词,他一个字都没提。为什么呢?也许他的词典里根本没有这样的词,也许有但是他觉得根本不重要。反正,从这些他没有用的词中,我看到了值得思考的东西。

统计文章的词频,给我提供了一个新的思路,能不能用python统计高频词呢?肯定是可以的。先放出一张最终结果图,有一个更直观的体验。下面就是我们如何一步一步实现这样的过程,Here we go!

twitter.png

这里使用python的jieba库(感谢开发)对中文进行分词。

首先需要安装分词库。打开终端,输入以下命令行。1$ pip install jieba若提示没有安装pip,则自行在网络中搜索pip 并安装。

将演讲(或其他)内容保存复制为report.txt,与py程序文件放在同一文件夹下,在终端运行以下程序[3-6]:1

2

3

4

5

6

7

8

9

10

11

12

13

14from collections import Counter

import jieba # 导入jieba库

f = open('report.txt').read() # 打开report.txt文档

words = list([word for word in jieba.cut(f, cut_all=False) if len(word) >= 2]) # 分词

data = dict(Counter(words).most_common(50)) # 统计词频,并以Dictionary的方式存储在data中,选择前50个高频词

# 打印高频词和出现次数

for key, value in data.items():

print key.encode('utf-8'), value

此处有几个地方解释一下:

(a) words = list([word for word in jieba.cut(f, cut_all=False) if len(word) >= 2]) 程序较为复杂,将分词功能和 If 判断放在一起。1

2

3

4

5seg_list = jieba.cut("我来到北京清华大学", cut_all=True)

print("Full Mode: " + "/ ".join(seg_list)) # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)

print("Default Mode: " + "/ ".join(seg_list))

输出为:1

2> Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

> Default Mode: 我/ 来到/ 北京/ 清华大学这里就能发现,设置cut_all = True 会将词语重复判断[7],【清华大学】会被划分成【清华】、【清华大学】、【华大】、【大学】。

(b). 这里利用Counter对象的函数,统计每个词出现的次数,并转化为字典(dict)。

(c). 程序最后的 For 循环将字典(dict)内的内容输出,在key.encode('utf-8')中添加了编码功能,是因为原来格式为unicode所致,对于python中gbk、unicode和str的编码转换,在此不赘述。

OK,以上程序就完成了对内容的高频词统计,也可以在上述程序后添加以下代码,将统计结果保存成txt,若要保存成excel,则需要导入其他python库。1

2

3

4fil = open("stat.txt",'w')

for key, value in data.items():

fil.write("%st%dn" % (key.encode('utf-8'), value))

fil.close()可以尝试将代码中的.encode('utf-8')去掉,改成fw.write("%st%dn" % (key, value)),看看保存的效果哦。

2. 清洗数据

我们已经将长度大于等于2的词统计出来,为展示直观,将这些高频词的词云展示如下:

clean.jpg

从这里会发现有些词是没有太多意义的,例如:一个、来说、并且、所以等。下面就需要进行数据清洗,去掉一些无意义的词。由于分词是记录在words这个列表内的,因此需要对words进行清洗。1

2

3

4

5

6

7

8

9

10exclude_words = ["一个","虽然","东西","包括","来说","但是","这个","这里"]

for word in words[:]:

if word.encode('utf-8') in exclude_words[:]:

words.remove(word)

a = []

for word in words:

a.append(word)

txt = r' '.join(a)

这里简单列出列出一些需要清洗的词。通过 For 循环列表元素,用 If 判断词语是否在排除列表中,满足条件则用将其删除[8]。注意,这里列表使用的是for word in words[:]:,而不是for word in words:,这里需要全部遍历。若使用for word in words:的话,会出现不完全遍历。

最后将清洗过的数据以一定格式保存在txt内。

当然也可以反向的方法:如果你有关键词词库,可以查看演讲中是否出现关键词库中的词。1

2

3

4

5

6

7exclude_words = ["一个","虽然","东西","包括","来说","但是","这个","这里"]

for word in words[:]:

if word.encode('utf-8') in exclude_words[:]:

pass

else:

words.remove(word)

既然我们已经将相关词汇统计并清理,下面介绍如何制作词云,数据可视化。

3. 绘制词云

绘制词云需要预先安装wordcloud库1$ pip install wordcloud

之后就可以绘制词云了。1

2

3

4

5

6

7

8

9

10

11

12

13

14from wordcloud import WordCloud

import numpy as np

from PIL import Image

fpath='/Libary/Fonts/Songti.ttc'

wordcloud = WordCloud(font_path= fpath,background_color='white').generate(txt)

wordcloud.to_file("wordcloud.jpg") #保存图片

import matplotlib.pyplot as plt

plt.imshow(wordcloud, interpolation ="bilinear")

plt.axis("off")

plt.show()

绘制词云后,可以将词云添加背景,将词云按照一定的方式排列,将代码修改如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23from wordcloud import WordCloud

import numpy as np

from PIL import Image

fpath='/Libary/Fonts/Songti.ttc'

d = path.dirname(__file__)

color_mask = np.array(Image.open(path.join(d, "background.jpg")))

cloud = WordCloud(

font_path=fpath,

background_color='white',#设置背景色

mask=color_mask, #词云形状

max_words=200, #允许最大词汇

max_font_size=40, #最大号字体

random_state=42

)

wordcloud = cloud.generate(txt)

import matplotlib.pyplot as plt

plt.imshow(wordcloud, interpolation ="bilinear")

plt.axis("off")

plt.show()需要将backgroud.jpg的背景图片放在同一文件夹。

以下放出两张基于 TESLA 和Mixin 背景做的词云。

tesla.png

mixin.png从上图TESLA背景的词云中可以看出,张小龙的演讲最重要的是“我们”。

注: 本文程序基于Mac OS系统,python2.7。

Logs

2019-01-13: 补充代码、写文章

2019-01-12: 写文章、修改代码

2019-01-11: 运行代码

2019-01-10: 查阅文章


http://chatgpt.dhexx.cn/article/ui0UlRWl.shtml

相关文章

文本情感分析:去停用词

原文地址 分类目录——情感识别 随便构造了一份测试数据如下,内容是gensim下的词向量生成模型word2vec的属性说明 一种方式,通过正则表达式,这里以去标点符号为例,在分词之前进行操作 import re# 通过正则表达式筛除string中的…

《实战》基于情感词典的文本情感分析与LDA主题分析

——基于电商领域的文本情感分析与LDA主题分析—— 一、情感分析1.1词典导入1.2 增加新词1.3合并到review_long_clean中1.4 修正情感倾向1.5计算每条评论的情感值1.6 查看情感分析效果 二、情感分析效果2.1 将数据合并2.2 结果对比2.3 情感词云 三、基于LDA模型的主题分析3.1建…

如何去做词频统计和关键词共现分析

1 对关键词的词频进行统计 下面展示一些 内联代码片。 # encodingutf-8 import openpyxl wb openpyxl.Workbook() wb openpyxl.load_workbook(copy1.xlsx) # Excel名 sh wb[all] # sheet名换一种写法 rowsh.max_row …

python3---情感分析(基于词典中文)

写在前面: 现有的情感分析比较常用的有两种,分别是基于词典的和机器学习,前者也属于非监督学习,后者自然一般属于监督学习。 刚开始学情感分析,下面先从**【基于词典的情感分析】**开始进行: 词典&#xf…

如何利用情感词典做中文文本的情感分析?

如何利用情感词典做中文文本的情感分析? 这是本学期在大数据哲学与社会科学实验室做的第四次分享了。 第一次分享的是:如何利用“wordcloudjieba”制作中文词云? 第二次分享的是:如何爬取知乎中问题的回答以及评论的数据&#…

基于情感词典的文本情感分析(一个最简单的举例能直接运行)

1. 使用情感词典进行情感分析的思路为 1) 将Web文本进行分句,使其以句子为单位进行处理;2) 从分句中抽取连词和否定词,并标记相应连词与否定词位置;3) 访问情感词汇本体,确定词汇极性…

Python利用情感词典做情感分析

情感分析是大数据时代常见的一种分析方法,多用于对产品评论的情感挖掘,以探究顾客的满意度程度。在做情感分析时,有两种途径:一种是基于情感词典的分析方法,一种是基于机器学习的方法,两者各有利弊。 在此&…

共现分析

一、共现分析概念 “共现”指文献的特征项描述的信息共同出现的现象,这里的特征项包括文献的外部和内部特征,如题名、作者、关键词、机构等。 而“共现分析”是对共现现象的定量研究, 以揭示信息的内容关联和特征项所隐含的知识。 二、共…

python基于情感词典的情感分析

今天给大家分享的是通过情感词典来对文本进行情感分析最后计算出情感得分 通过情感得分来判断正负调性 主要步骤: 数据准备 本次情感词典采用的是BosonNLP的情感词典,来源于社交媒体文本,所以词典适用于处理社交媒体的情感分析 本次分析准备的…

python 热词分析_Python笔记:热词分析2020-01-01

热词分析在公众趋势分析、舆情分析有很宽广的应用,我们来看看怎么从一个TXT文件中分析出文章的热词出来,我们采用流行的第三方“结巴”包来实现。 首先安装第三方包(matplotlib,jieba,wordcloud,numpy)mmatplotlib主要…

【共词聚类分析】基于CNKI和WOS的小样本稳健性检验

很久之前的一篇文章,最近终于收到了Reviewers的回复(一把心酸…其中有一个Comments如下,意思是我们原先的文章没法证明共词聚类方法的结论是合理的…于是打算新增加一个稳健型检验(robust analysis),由于上…

python共词矩阵分析结果一步到位

import os import re import pandas as pd from PyPDF2 import PdfFileReader import string import yakeif __name__ __main__:# 运行第一部分代码pdf_files_path C:/Users/win10/Documents/美国智库/pdf_files# 定义一个函数,用于读取PDF文件并将其转化成文本de…

共词分析

一、共现分析概念及主要类型 “共现”指文献的特征项描述的信息共同出现的现象,这里的特征项包括文献的外部和内部特征,如题名、作者、关键词、机构等。而“共现分析”是对共现现象的定量研究,以揭示信息的内容关联和特征项所隐含的知识。常…

AD09由英文改中文菜单步骤

1:打开AD09,点击DXP,选择Preferences 2:在对话框的左边一竖列选择General 3:选择左边竖列后,在右边找到Localization选项 4:点击应用,再点击OK。 5:然后关闭AD09&#xf…

AD软件的常用基本设置

AD软件的基本设置 前言 工欲善其事,必先利其器;最近学弟一直在忙着画板子,但是效率非常低,在看过他的软件基本设置,以及对软件快捷键掌握程度后(新手小白),我决定将常AD的常用基本…

STM32定时器做时钟源输出基于CubeMx

目录 前言 CubeMX配置 开始函数 改变频率 改占空比 结论 前言 调试使用的评估板:https://item.taobao.com/item.htm?spma230r.1.14.17.432b1562F8z658&id612002664117&ns1&abbucket14#detail 作者再调试AD5933过程中,需要输出100Hz…

Evaluation Board User Guide UG-364 文档 BUG

最近作者使用这个芯片;在进行硬件性能对比测试中发现ADI文档中的一个小问题; 相位角计算的过程中,就是下图 结合下面的代码,验证了上面文档应该是手误导致的。

2019年全国大学生电子设计竞赛D题简易电路特性测试仪试题

题目要求部分 我负责的部分就是测量阻抗的部分,这一次我使用的是AD5933 AD5933介绍 我这一篇主要是讲使用5933计算那个待测电路的阻抗值,首先就是在概括处已经说明是我们读取的数据其实是一个实部和一个虚部。 然后我们要记住的是向寄存器0x94&#xf…

电赛专题 |国一作品_线路负载及故障检测装置

有幸邀请到了在2019大学生电子设计大赛的获奖优秀队员为本公众号投稿,将分几次推文为大家介绍几只优秀队伍的作品。 本次推文为大家分享西安电子科技大学微电子学院的团队的作品,团队成员为:蒋昊宇 冯郑 张岳琦(排名不分先后&…

智能电导率系统电路设计详解

电导率是一个衡量水溶液导电能力的电学物理量, 电阻率的倒数为电导率,用希腊字母κ表示,κ1/ρ。一般意义上,电导率的测量温度是标准温度(25℃)。在液体中,水的电导率是衡量水质的一个重要指标。…