每个英语学渣(好吧,其实这个说的就是学渣本渣了)都有这样一个梦想:能够一边轻松愉快地看着美剧,一边自己的英语听力水平还能蹭蹭地往上涨。知乎上也有很多人分享了自己通过美剧练习听力的方法,比如说只开英文字幕或者干脆就不要字幕。但是这两个方法都有自己的缺点,只开英文字幕的方法虽然说避免了下意识只看中文,但是却造成了只看字幕不听读音,从而练习了阅读忽略了听力;不开字幕的方法确实做到了强迫自己必须认真听,可是对于很多人来说,美剧中充满了大量的陌生词汇,比如说:

这句话中的 betrayal 是背叛的名词形式,可能很多人就不认识,或者说认识但是却没听过他的正确发音。这样一来,对这句话的理解就会出现障碍。美剧中还有很多类似情况,用这样的听力材料显然是不适合的。为了应对这种情况,我有了个想法:将字幕中的词汇拆分,并进行词频的检测,如果词频在 4000(可以根据自己的情况进行调整)以内,则将单词删除,如果词频在 4000 以外,则单独标注出该词的中文,效果如下:

这样一来,这句话对于我来说就没有任何词汇上的障碍,假如一遍听不懂,我就可以放心大胆的再听一遍而不必担心是由于词汇的问题造成的理解障碍。

下面介绍程序的大体思路:

首先观察字幕文件,选择后缀名为 srt 的字幕文件用记事本打开如下(其他类型的字幕文件用记事本打开以后格式非常复杂,此处不讨论):

观察文本特点,撰写相应的正则表达式

虽然在 Python 中使用正则表达式有几个步骤,但每一步都相当简单。

  1. import re导入正则表达式模块。

  2. re.compile()函数创建一个Regex对象(记得使用原始字符串)。

  3. Regex对象的search()方法传入想查找的字符串。它返回一个Match对象。

  4. 调用Match对象的group()方法,返回实际匹配文本的字符串。

常用的匹配规则:

  • ?匹配零次或一次前面的分组。

  • *匹配零次或多次前面的分组。

  • +匹配一次或多次前面的分组。

  • {n}匹配 n 次前面的分组。

  • {n,}匹配 n 次或更多前面的分组。

  • {,m}匹配零次到 m 次前面的分组。

  • {n,m}匹配至少 n 次、至多 m 次前面的分组。

  • {n,m}?*?+?对前面的分组进行非贪心匹配。

  • ^spam意味着字符串必须以 spam 开始。

  • spam$意味着字符串必须以 spam 结束。

  • .匹配所有字符,换行符除外。

  • \d\w\s分别匹配数字、单词和空格。

  • \D\W\S分别匹配出数字、单词和空格之外的所有字符。

  • [abc]匹配方括号内的任意字符(诸如 a、b 或 c)。

  • [^abc]匹配不在方括号内的任意字符

Python中转义字符使用倒斜杠(\)。字符串'\n'表示一个换行字符,而不是倒斜杠加上一个小写的n。你需要输入转义字符\\,才能打印出一个倒斜杠。所以'\\n'表示一个倒斜杠加上一个小写的 n。但是,通过在字符串的第一个引号之前加上r,可以将该字符串标记为原始字符串,它不包括转义字符。输入r'\d\d\d-\d\d\d-\d\d\d\d',比输入'\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d'要容易得多。

由上述相应规则结合文本特点得到:

#空行、行数标号正则表达式rgx_none_and_num = re.compile(r'\d{1,2}\n')#时间正则表达式rgx_time = re.compile(r'\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d\n')

之后,因为要查询词频,我在事先已经准备好了词频表:

要处理表格,需要用到 openpyxl 模块,下面是从电子表格文件中读取单元格涉及的所有函数、方法和数据类型。

  1. 导入openpyxl模块。

  2. 调用openpyxl.load_workbook()函数。

  3. 取得Workbook对象。

  4. 调用get_active_sheet()get_sheet_by_name()工作簿方法。

  5. 取得Worksheet对象。

  6. 使用索引或工作表的cell()方法,带上rowcolumn关键字参数。

  7. 取得Cell对象。

  8. 读取Cell对象的value属性。

由上述结合表格内容,建立词库字典:

#词频在4000以后的字典:wordlist4001 = {}#事先将名为“1-20000.xlsx”的词频表放在当前工作目录excel_content = openpyxl.load_workbook('1-20000.xlsx') sheet = excel_content['Sheet1']for row in range(4000,20201):    wordlist4001[sheet.cell(row,1).value] = sheet.cell(row,2).value#词频在4000以前的字典:wordlist4000 = {}for row in range(1,4001):    wordlist4000[sheet.cell(row,1).value] = sheet.cell(row,2).value

所有准备工作完成后,开始读取字幕文件和处理字幕文件,最后新建一个处理过后的字幕文件。完整程序如下:

# -*- coding:utf-8 -*-#导入模块import re,openpyxl#读入字幕文件text=open('The.Big.Bang.Theory.s05e05.720p.x264.chs&eng.srt','r')#空行、行数标号正则表达式rgx_none_and_num = re.compile(r'\d{1,2}\n')#时间正则表达式rgx_time = re.compile(r'\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d\n')#处理字幕文件first_step = text.readlines()#新建一个字幕文件new_file = open('C:\\Users\\SYQ\Desktop\\处理版.srt','w')#建立4000后的字典wordlist4001 = {}excel_content = openpyxl.load_workbook('1-20000.xlsx')sheet = excel_content['Sheet1']for row in range(4000,20201):    wordlist4001[sheet.cell(row,1).value] = sheet.cell(row,2).value#建立4000前的字典wordlist4000 = {}for row in range(1,4001):    wordlist4000[sheet.cell(row,1).value] = sheet.cell(row,2).value#挑选出文字行进行处理for line in first_step:    #如果为空行,行数标号,则不动    if rgx_none_and_num.search(line):        new_file.write(line)    #如果为时间行则不动    elif rgx_time.search(line):        new_file.write(line)    #如果为字幕行,则处理    else:        words = line.lower().split()        for word in words:            #如果单词不在字典中,则跳过            if word in wordlist4000:                pass            #如果单词在字典中,则添加翻译            elif word not in wordlist4001:                pass            else:                new_word = word + ':' + wordlist4001[word] +'\n'                new_file.write(new_word)#关闭文件text.close()new_file.close()

因为我也是一个 python 初学者,因此在实现这个想法的过程中也遇到了很多问题,最后实现的方法可能也显得很笨拙,但是最后实现了还是很开心的,哈哈哈。


本文是我们编程教室新春征稿活动的一篇投稿,来自作者 @司夜。他和我们很多读者一样,学习 python 的时间并不长,但已经把 python 应用到自己的日常学习生活中,并整理成文投稿给我们,这很值得肯定。在实践中应用向他人讲解都是非常好的学习方式。不用在意自己写的代码还不够完善,Done is better than perfect!

我们编程教室会持续向所有人开放,如果有投稿或参与志愿者的意向,欢迎随时在公众号里给我们留言。

另外,关于编程与英语的结合,我们之前也有过不少文章,感兴趣的可以阅读:

  • 我们用程序整理出了一份Python英语高频词汇表,拿走不谢!

  • 分享一个强大的英汉词典开源数据库

  • 英语 vs 编程

  • 【每周一坑】单词本(此系列可在“每周一坑”栏目中查看)


其他内容回复左侧关键词获取:

python :零基础入门课程目录

新手 :初学者指南及常见问题

资源 :超过500M学习资料网盘地址

项目 :十多个进阶项目代码实例

如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

Python转行 | 爬抖音 | 如何debug | 查天气 | 我用Python | 知乎 | 单词表 | 新手建议 | 如何提问 | 一图学Python | 智能防挡弹幕 | 红包提醒 | 流浪地球


欢迎加入

Crossin的编程教室

crossincode.com

请把我们分享给身边爱学习的小伙伴 :)  

点击文末“”,查看更多学习资源

python 英语词频统计软件_为了边看美剧边学英语,我写了个字幕处理脚本相关推荐

  1. python 英语词频统计软件_Python数据挖掘——文本分析

    作者 | zhouyue65 来源 | 君泉计量 文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程. 一.语料库(Corpus) 语料库是我们要分析的所有文档的集合. ...

  2. python英语词频_为了边看美剧边学英语,我写了个字幕处理脚本

    每个英语学渣(好吧,其实这个说的就是学渣本渣了 ‍♀️)都有这样一个梦想:能够一边轻松愉快地看着美剧,一边自己的英语听力水平还能蹭蹭地往上涨.知乎上也有很多人分享了自己通过美剧练习听力的方法,比如说只 ...

  3. python 英语词频统计软件_Python实现统计英文文章词频的方法分析

    本文实例讲述了Python实现统计英文文章词频的方法.分享给大家供大家参考,具体如下: 应用介绍: 统计英文文章词频是很常见的需求,本文利用python实现. 思路分析: 1.把英文文章的每个单词放到 ...

  4. python高手 百家号_别犹豫,美剧想看就看,手把手教你用Python轻松获取经典美剧地址...

    最早一部<越狱>转变了我对美剧的看法.主人公scofield的聪明才智和坚强的毅力,<绝命毒师>里面主人公的中年逆袭,<纸牌屋>里面老谋深算的政客,等等,这些美剧和 ...

  5. 牛人经验:看美剧学习英语的诀窍

    现在大家最喜欢看的就是美剧,网上看.下载看.买碟看.BT的种子星火燎原,盗版事业遍地开花.看的人数之多,简直可以用骇人听闻来形容...... 庞大的群众基础,造就出一批有志青年,打算寓教于乐,从看剧中 ...

  6. Python英文词频统计(哈姆雷特)程序示例

    今天继续给大家介绍Python相关知识,本文主要内容是Python英文词频统计程序示例,主要是对英文文本--<哈姆雷特>进行分词. 一.英文文本词频统计思路 想要对<哈姆雷特> ...

  7. 201671010411+巩定定+词频统计软件项目报告

    课程名 软件工程 实验二 词频统计软件项目报告 词频(TF) 是一个词语出现的次数除以该文件的总词语数. 实验目的 (1)掌握软件项目个人开发流程. (2)掌握Github上发布软件项目的操作方法. ...

  8. 如何通过看美剧提高英语

    看到很多童鞋讨论有关美剧学习英语到底有没有用,以及用哪部美剧练习,我在这里想说这只是一个参考,世界上没有绝对的事情,究竟有没有用看个人,如果你 到现在还无法衡量自己的英语水平或者依旧被英语牵着鼻子走, ...

  9. 如何通过看美剧来提高英语水平(转)

    没想到这篇日志会这么火,看到很多童鞋讨论有关美剧学习英语到底有没有用,以及用哪部美剧练习,我在这里想说这只是一个参考,世界上没有绝对的事情,究竟有没有用看个人,想必在校内上至少是高中生,大部分是大学生 ...

最新文章

  1. 趣学python3(28)-pygame-蛇身随机运动(可gameover )
  2. 半天搭建你的Jenkins持续集成与自动化部署系统
  3. python以什么方式处理文件-Python文件修改和常用方法
  4. php 验证 e mail,PHP表单验证Name,E-mail,和URL-三体教程在线编辑器
  5. bci测试如何整改_基于fNIRS技术的脑机接口(BCI)
  6. 阿里投资小鹏汽车,是提速自动驾驶布局的开端吗?
  7. 2019-12-17 TCP报头结构
  8. 缺失数据em算法python_EM算法
  9. 异或运算符 判断奇偶
  10. sql ,类型转换,日期截取格式
  11. vant中修改用户的头像
  12. 愤怒的导数:一点可导和邻域内可导能推出来什么?
  13. Verilog 仿真事件中的延时分析
  14. 机器学习-02 基于sklearn 广义线性模型-普通最小二乘法
  15. Android 利用摄像头指尖测试心率
  16. c语言http上传图片,基于RTOS的c语言实现http文件上传
  17. [MetalKit]45-Using eGPUs with Metal 在 eGPU上使用 Metal
  18. 直播倒计时android,直播代码,Android实现验证码倒计时
  19. 高并发情况下保证高可用性
  20. 两个整数取中间值问题

热门文章

  1. Django(part38)--制作登录界面
  2. 《统计学:从数据到结论》学习笔记(part2)--总体是人们所关心的所有个体的集合
  3. python与正则表达式(part1)--元字符
  4. TypeScript class 的访问控制
  5. 为什么按照 Angular 官网教程执行简单的测试代码,会遇到expect is not defined的错误消息
  6. 培训学习笔记 - 人们不买钻头,他们买孔洞
  7. 如何使用Angular rxjs进行优雅限流
  8. SAP Spartacus里的标准Banner设计
  9. Angular源代码里字母Theta的含义
  10. SAP Spartacus core fromOccBaseSites逻辑