用Python正则实现词频统计并验证Zipf-Law
注:
- 以长篇小说《追风筝的人》(中文版为例)
- Zipf-Law:
在给定的语料中,对于任意一个term,其频度(freq)的排名(rank)和频度(freq)的乘积大致是一个常数。
推荐阅读:Zipf and Heaps Laws’ Coefficients Depend on Language
导入中文分词库jieba,Counter库,matplotlib.pyplot库和re库
import jieba
import re
import matplotlib.pyplot as plt
from collections import Counter
jieba 是一个python实现的分词库,对中文有着很强大的分词能力。git链接
代码中采用的均为jieba库的基本用法,本文不再赘述。
导入打开要处理的文本追风筝的人并利用jieba分词
博主采用txt格式,提供一个追风筝的人.txt下载链接供参考:
追风筝的人.txt
txt = open("追风筝的人.txt", "r", encoding="gb18030").read()
words = jieba.lcut(txt)
去除多余的标点符号,只统计词频
extra_characters = {",", "。", "\n", "“", "”", ":", ";", "?", "(", ")", "!", "…"}
遍历计数并去除多余符号
counts = {}
for word in words:counts[word] = counts.get(word,0)+1for word in excludes:del counts[word]
返回遍历得到的键与值并排序
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
sort_list = sorted(counts.values(), reverse=True)
将统计数据写入data.txt文本记录词频
file = open('data.txt', mode='w')for i in range(12138):word, count = items[i]print("{0:<10}{1:>5}".format(word,count))new_context = word + " " + str(count) + '\n'file.write(new_context)file.close()
正则匹配结果,并将结果保存到re_match.txt
result = open('re_match.txt', mode='w',encoding='utf-8')
#存正则匹配的数组sentences
sentences = []#正则匹配:人物说的内容(匹配小说中带?/!的话语)
for i in re.finditer("“(.+)(\?|\!)”", txt):message = i.group(1)sentences.append(message)#计数和并保存到re_match.txt
c = Counter(sentences)
for k, v in c.most_common(51):print(k, v)context = k + " " + str(v) + '\n'result.write(context)result.close()
用matplotlib验证Zipf-Law并出图
plt.title('Zipf-Law',fontsize=18) #标题
plt.xlabel('rank',fontsize=18) #排名
plt.ylabel('freq',fontsize=18) #频度
plt.yticks([pow(10,i) for i in range(0,4)]) # 设置y刻度
plt.xticks([pow(10,i) for i in range(0,4)]) # 设置x刻度
x = [i for i in range(len(sort_list))]
plt.yscale('log') #设置纵坐标的缩放
plt.xscale('log') #设置横坐标的缩放
plt.plot(x, sort_list , 'r') #绘图
plt.savefig('./Zipf_Law.jpg') #保存图片
plt.show()
附完整代码如下,仅供参考:github链接
用Python正则实现词频统计并验证Zipf-Law相关推荐
- python红楼梦词频统计
python红楼梦词频统计 <红楼梦>人物的出场统计涉及对词汇的统计,中文文章的需要分词才能进行词频统计,需要用到jieba库. 分析过程: 代码: import jieba txt=op ...
- 浅析如何用Python进行中英文词频统计
浅析如何用Python进行中英文词频统计 主要思路: 读取数据 数据预处理 分词 词频统计 结果显示 词频统计 TF-IDF(term frequency–inverse document frequ ...
- Python实例--文本词频统计
最近在MOOC跟着北京理工大学的嵩天老师学习Python(https://www.icourse163.org/learn/BIT-268001?tid=1003243006#/learn/annou ...
- python分词和词频统计
Python大数据:jieba分词,词频统计 黑冰中国 关注 0.1 2018.03.21 11:39* 字数 1717 阅读 7553评论 6喜欢 45赞赏 1 实验目的 学习如何读取一个文件 学 ...
- python红楼梦词频统计_用 Python 分析《红楼梦》(2)-阿里云开发者社区
6 词频统计 完成分词以后,词频统计就非常简单了.我们只需要根据分词结果把片段切分开,去掉长度为一的片段(也就是单字),然后数一下每一种片段的个数就可以了. 这是出现次数排名前 20 的单词: (括号 ...
- Python案例:词频统计
一.提出任务 统计文本文件里单词出现次数 - 词频,绘制词频折线图,按词频降序排列. 二.完成任务 1.创建文本文件test.txt 2.创建Python程序 - 词频统计.py # -*- codi ...
- Python如何进行词频统计?3种方法教给你
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于快学Python ,作者小小明 Python爬虫.数据分析.网站开发等案例教程 ...
- python红楼梦词频统计_Python 红楼梦的字频与词频统计
Python 红楼梦的字频与词频统计 使用jieba分词工具分词,在网上下载了一个停用词表(包括标点符号)去除停用词. 使用wordcloud生成词云. 其实除了停用词,程度词与否定词等也应该去除,但 ...
- python进行词频统计_如何利用Python进行文本词频统计
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 Python在自然语言处理这个方面,有其天然的优势: ...
- python英文文本词频统计_Python英文文章词频统计(14份剑桥真题词频统计)
Python剑桥真题词频统计 最好还是要学以致用,自主搜集了19年最近的14份剑桥真题之后,通过Python提供的jieba第三方库,对所有的文章信息进行了词频统计,并选择性地剔除了部分简易词汇,比如 ...
最新文章
- 火车票上的星号暗藏玄机?!
- IE8 CSS hack
- react ui框架_顶级React组件库推荐
- Linux 系统 vsftpd时区问题的解决
- 录播软件开始麦克风应该打开还是关闭
- H3C交换机设置DHCP中继,配合Linux 服务器为多VLAN提供DHCP地址分配服务
- 2021曾都二中高考成绩查询入口,2021高考-随州设4个考区11个考点·
- mysql导出选择两张表,Mysql导出(多张表)表结构及表数据 mysqldump用法
- span 超出部分换行
- .NET面试题系列(二十)XX
- 大事件!35的程序员竟然失去了面试资格,这是为什么?
- python控制风扇_如何使用Python在raspberrypi3上使用GPIO控制风扇?
- conda安装tensorflow-GPU出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url错误
- java模拟洗衣机程序,JAVA洗衣机仿真程序实验报告及代码
- [附源码]Java计算机毕业设计SSM大众点评管理系统
- 什么是数据运营?数据运营是做什么的?
- 如何在最短的时间内完成立春主题的公众号图文排版?
- 工单流转 指派 php,第三节 工单的指派和处理
- 乐视2 usb计算机连接,乐视 LetvX620 开启USB调试模式
- 问题记录:Ubuntu中source运行.sh shell脚本报错:command not found 未找到命令