用python正则表达式实现简单的词形统计
需求如下:

  交流了好长时间才知道她要的是词形统计,如AA.AAB,AABB...
编码如下
import re
from matplotlib import font_manager
import matplotlib.pyplot as plt
import numpy as np
def read_file_gbk(filename):with open(filename,'r',encoding='GBK') as f:s = f.read()s = re.sub('/C', '', s)s = re.sub('\r|\n|\s','',s)return s
def read_file_utf8(filename):with open(filename,'r',encoding='utf-8') as f:s = f.read()s = re.sub('/C', '', s)s = re.sub('\r|\n|\s','',s)return s
def dict_sort(dictname):dictlist = sorted(dictname.items(),key=lambda x:x[1],reverse=True)return dict(dictlist)
def main():#  读取文本,输出为长串字符s = read_file_gbk('zz.txt')# 通过标点符合进行切分,同时去掉特殊字符sentences = re.split(r' *[\.\?!,。…… —— oo ll 99][\'"\)\]]* *', s)#初始化《主角》 数量SIZE_AA_ZZ = 0;SIZE_AABB_ZZ = 0;SIZE_ABB_ZZ = 0;SIZE_ABAB_ZZ = 0;for stuff in sentences:# print(stuff)# 原理解析# "(.)\1(.)\2"这个正则,# .表示除换行外任意字符# \1 表示第一个括号里面的字符重复,默认重复一次,想重复4次加{4} 即(.)\1{4}# \2 表示第二个括号里面的字符重复# 开始匹配AAstrings = re.finditer(r'(.)\1', stuff)# print(type(strings))for i in strings:print(i)SIZE_AA_ZZ = SIZE_AA_ZZ+1strings = re.finditer(r'(.)\1(.)\2', stuff)for i in strings:print(i)SIZE_AABB_ZZ =SIZE_AABB_ZZ+1strings = re.finditer(r'(.)\1(.)\2', stuff)for i in strings:print(i)SIZE_ABB_ZZ =SIZE_ABB_ZZ+1strings = re.finditer(r'(..)\1', stuff)for i in strings:print(i)SIZE_ABAB_ZZ =SIZE_ABAB_ZZ+1s = read_file_utf8('qq.txt')print(s)sentences = re.split(r' *[\.\?!,。…… —— oo ll 99 00 44 66 11 一一 tt // ww][\'"\)\]]* *', s)#初始化《秦腔》 数量SIZE_AA_QQ = 0SIZE_AABB_QQ = 0SIZE_ABB_QQ = 0SIZE_ABAB_QQ = 0for stuff in sentences:# print(stuff)# 开始匹配AAstrings = re.finditer(r'(.)\1', stuff)# print(type(strings))for i in strings:print(i)SIZE_AA_QQ = SIZE_AA_QQ+1strings = re.finditer(r'(.)\1(.)\2', stuff)for i in strings:print(i)SIZE_AABB_QQ =SIZE_AABB_QQ+1strings = re.finditer(r'(.)\1(.)\2', stuff)for i in strings:print(i)SIZE_ABB_QQ =SIZE_ABB_QQ+1strings = re.finditer(r'(..)\1', stuff)for i in strings:print(i)SIZE_ABAB_QQ =SIZE_ABAB_QQ+1print("《主角》中的AA形式有"+str(SIZE_AA_ZZ)+"个")print("《主角》中的AABB形式有"+str(+SIZE_AABB_ZZ)+"个")print("《主角》中的ABB形式有"+str(SIZE_ABB_ZZ)+"个")print("《主角》中的ABAB形式有"+str(SIZE_ABAB_ZZ)+"个")print("《秦腔》中的AA形式有"+str(SIZE_AA_QQ)+"个")print("《秦腔》中的AABB形式有"+str(SIZE_AABB_QQ)+"个")print("《秦腔》中的ABB形式有"+str(SIZE_ABB_QQ)+"个")print("《秦腔》中的ABAB形式有"+str(SIZE_ABAB_QQ)+"个")# start draw# 构建数据x_data = ['AA', 'AABB', 'ABB', 'ABAB']y_data = [SIZE_AA_ZZ, SIZE_AABB_ZZ,SIZE_ABB_ZZ, SIZE_ABAB_ZZ]y_data2 = [SIZE_AA_QQ, SIZE_AABB_QQ,SIZE_ABB_QQ, SIZE_ABAB_QQ]bar_width = 0.3my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf', size=12)plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 将X轴数据改为使用range(len(x_data), 就是0、1、2...plt.bar(x=x_data, height=y_data, label='主角',color='steelblue', alpha=0.8, width=bar_width)# 将X轴数据改为使用np.arange(len(x_data))+bar_width,# 就是bar_width、1+bar_width、2+bar_width...这样就和第一个柱状图并列了plt.bar(x=np.arange(len(x_data)) + bar_width, height=y_data2,label='秦腔', color='indianred', alpha=0.8, width=bar_width)# 在柱状图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式for x, y in enumerate(y_data):plt.text(x, y + 100, '%s' % y, ha='center', va='bottom')for x, y in enumerate(y_data2):plt.text(x + bar_width, y + 100, '%s' % y, ha='center', va='top')# 设置标题plt.title("《主角》与《秦腔》对比")# 为两条坐标轴设置名称plt.xlabel("类型")plt.ylabel("数量")# 显示图例plt.legend()plt.show()if __name__=="__main__":main()
调试结果

总结
 思路很简单,就是读文件-->分句-->正则提取-->统计-->绘图。话不多说,继续我的java搬砖大业了哈哈

python实现简单的词形统计相关推荐

  1. python实现excel计算_用python实现简单EXCEL数据统计的实例

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码:import xlrd workbook = xlrd.open_w ...

  2. python对excel数据统计_用 python实现简单EXCEL数据统计

    原博文 2016-11-24 23:06 − 任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlr ...

  3. Python字典简单实现词频统计

    目录 问题引入: 原理: 基本流程: 词频统计 ①录入待统计的句子 ②分割为多个单词 ③创建字典 利用Python内置库快速实现词频统计 全部代码 普通方法 方法二:get()实现 内置库实现 Pyt ...

  4. 使用Python实现简单的考研英语高频单词统计

    使用Python实现简单的词频统计 前言 anaconda第三方库的安装 代码分享及分析 前言 此次作为一个简单demo分享,闲来试试做一个词频统计统计英语卷子单词出现的次数及频率,具体代码及分析如下 ...

  5. python爬虫餐饮行业数据分析统计服_Python数据分析实战,简单快速制作餐饮行业商业化报告...

    前些天有个朋友向我求救,他们公司最近要针对餐饮行业做数据分析,并为某些商家做出线上营销方案.但是他一头雾水,不知道该从哪方面下手. 我提醒他,是否先从商家的线上评价作为数据分析的入口例如美团.大众点评 ...

  6. 使用Python+NLTK实现英文单词词频统计

    使用Python+NLTK实现英文单词词频统计 使用PythonNLTK实现英文单词词频统计 应用场景 Fork Me 参考运行环境 流程步骤图 详细步骤 读取文件 过滤特殊符号以及还原常见缩写单词 ...

  7. idf实验室--简单编程字符统计

    idf实验室--简单编程字符统计,有需要的朋友可以参考下. 第一眼看这道题很简单,不就是字符统计么,可是题目要求2s内回答,而且每次打开的页面需要统计的字符串内容都会变,这就蛋疼了,于是乎上网学习下如 ...

  8. Python数模笔记-StatsModels 统计回归(3)模型数据的准备

    1.读取数据文件 回归分析问题所用的数据都是保存在数据文件中的,首先就要从数据文件读取数据. 数据文件的格式很多,最常用的是 .csv,.xls 和 .txt 文件,以及 sql 数据库文件的读取 . ...

  9. python documents in chinese_基于 Python 的简单自然语言处理实践

    基于 Python 的简单自然语言处理 Twenty News Group 语料集处理 20 Newsgroup 数据集包含了约 20000 篇来自于不同的新闻组的文档,最早由 Ken Lang 搜集 ...

  10. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用三:物体运动跟踪

    教程: 博主之前写了23节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

最新文章

  1. “此文件来自其他计算机,可能被阻止以帮助保护该计算机” 教你win7解除阻止程序运行怎么操作...
  2. 【深度学习】面向医学图像的病灶分割调研(二)
  3. mysql 表数据转储_在MySQL中仅将表结构转储到文件中
  4. Maven的maven-clean-plugin插件详解
  5. 力扣面试题 01.08. 零矩阵
  6. 从开源视角分析,搞定边缘计算云原生方案选型
  7. Python全栈开发之并发编程
  8. 通过Windows远程桌面连接将远程文件传输至本地
  9. unity Mirror使用笔记
  10. 《Linux编程》上机作业 ·004【文件I/O操作】
  11. 田间小麦病害自动诊断系统(野外复杂环境)
  12. html+xml+js语言切换插件,你在Eclipse中使用什么CSS / JS / HTML / XML插件?
  13. 解决word错误提示宏错误提示和模板错误提示
  14. 201521123081《Java程序设计》 第4周学习总结
  15. m3u8在线播放工具,在线播放地址
  16. 微信小程序:人生重开模拟器
  17. 配置PLSQL连接ORACLE数据库
  18. 使用逐步细化开发 DFD
  19. 网关是什么?工业网关是什么?
  20. [OpenHarmony RK3568](四)WIFI芯片适配

热门文章

  1. 360度全景视频拍摄小技巧,这些方法你要知道
  2. 无缝滚动加加暂停效果
  3. PHP电商网站高并发的秘诀之电商秒杀活动
  4. 拼多多秒杀活动的谣言
  5. python中output使用_如何在Python中使用subprocess.check_output()?
  6. 网站打不开如何解决?教你4个方法搞定它!
  7. dw设置html背景,Dreamweaver默认浏览器怎么设置
  8. Kyligence 完成 2500 万美元 C 轮融资,Coatue 领投
  9. 活水渠 - 云影院之云时代看片全攻略
  10. 基于epoll,socket与protobuf的简单帧同步游戏服务器