注:
  • 以长篇小说《追风筝的人》(中文版为例)
  • 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相关推荐

  1. python红楼梦词频统计

    python红楼梦词频统计 <红楼梦>人物的出场统计涉及对词汇的统计,中文文章的需要分词才能进行词频统计,需要用到jieba库. 分析过程: 代码: import jieba txt=op ...

  2. 浅析如何用Python进行中英文词频统计

    浅析如何用Python进行中英文词频统计 主要思路: 读取数据 数据预处理 分词 词频统计 结果显示 词频统计 TF-IDF(term frequency–inverse document frequ ...

  3. Python实例--文本词频统计

    最近在MOOC跟着北京理工大学的嵩天老师学习Python(https://www.icourse163.org/learn/BIT-268001?tid=1003243006#/learn/annou ...

  4. python分词和词频统计

    Python大数据:jieba分词,词频统计  黑冰中国 关注 0.1 2018.03.21 11:39* 字数 1717 阅读 7553评论 6喜欢 45赞赏 1 实验目的 学习如何读取一个文件 学 ...

  5. python红楼梦词频统计_用 Python 分析《红楼梦》(2)-阿里云开发者社区

    6 词频统计 完成分词以后,词频统计就非常简单了.我们只需要根据分词结果把片段切分开,去掉长度为一的片段(也就是单字),然后数一下每一种片段的个数就可以了. 这是出现次数排名前 20 的单词: (括号 ...

  6. Python案例:词频统计

    一.提出任务 统计文本文件里单词出现次数 - 词频,绘制词频折线图,按词频降序排列. 二.完成任务 1.创建文本文件test.txt 2.创建Python程序 - 词频统计.py # -*- codi ...

  7. Python如何进行词频统计?3种方法教给你

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于快学Python ,作者小小明 Python爬虫.数据分析.网站开发等案例教程 ...

  8. python红楼梦词频统计_Python 红楼梦的字频与词频统计

    Python 红楼梦的字频与词频统计 使用jieba分词工具分词,在网上下载了一个停用词表(包括标点符号)去除停用词. 使用wordcloud生成词云. 其实除了停用词,程度词与否定词等也应该去除,但 ...

  9. python进行词频统计_如何利用Python进行文本词频统计

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 Python在自然语言处理这个方面,有其天然的优势: ...

  10. python英文文本词频统计_Python英文文章词频统计(14份剑桥真题词频统计)

    Python剑桥真题词频统计 最好还是要学以致用,自主搜集了19年最近的14份剑桥真题之后,通过Python提供的jieba第三方库,对所有的文章信息进行了词频统计,并选择性地剔除了部分简易词汇,比如 ...

最新文章

  1. 火车票上的星号暗藏玄机?!
  2. IE8 CSS hack
  3. react ui框架_顶级React组件库推荐
  4. Linux 系统 vsftpd时区问题的解决
  5. 录播软件开始麦克风应该打开还是关闭
  6. H3C交换机设置DHCP中继,配合Linux 服务器为多VLAN提供DHCP地址分配服务
  7. 2021曾都二中高考成绩查询入口,2021高考-随州设4个考区11个考点·
  8. mysql导出选择两张表,Mysql导出(多张表)表结构及表数据 mysqldump用法
  9. span 超出部分换行
  10. .NET面试题系列(二十)XX
  11. 大事件!35的程序员竟然失去了面试资格,这是为什么?
  12. python控制风扇_如何使用Python在raspberrypi3上使用GPIO控制风扇?
  13. conda安装tensorflow-GPU出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url错误
  14. java模拟洗衣机程序,JAVA洗衣机仿真程序实验报告及代码
  15. [附源码]Java计算机毕业设计SSM大众点评管理系统
  16. 什么是数据运营?数据运营是做什么的?
  17. 如何在最短的时间内完成立春主题的公众号图文排版?
  18. 工单流转 指派 php,第三节 工单的指派和处理
  19. 乐视2 usb计算机连接,乐视 LetvX620 开启USB调试模式
  20. 问题记录:Ubuntu中source运行.sh shell脚本报错:command not found 未找到命令

热门文章

  1. R语言数据分析案例(1)
  2. oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及解决方案
  3. 映美精LoadDeviceStateFromFile问题
  4. 2020最新最稳微信公众号爬虫
  5. delphi dll 使用
  6. Linux:TCP粘包问题的模拟实现以及解决方法
  7. 《未来世界的幸存者》:你会是未来世界的幸存者吗?
  8. 服务器虚拟化的重要性,服务器虚拟化:虚拟机迁移的重要性
  9. max30102c语言程序,STM32驱动MAX30102源码
  10. win10硬盘锁怎么解除_Win10磁盘被写保护怎么解除?