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

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

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

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

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

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

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

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

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

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

调用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 模块,下面是从电子表格文件中读取单元格涉及的所有函数、方法和数据类型。

导入openpyxl模块。

调用openpyxl.load_workbook()函数。

取得Workbook对象。

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

取得Worksheet对象。

使用索引或工作表的cell()方法,带上row和column关键字参数。

取得Cell对象。

读取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!

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

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

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

每周一坑”栏目中查看)

════

其他文章及回答:

欢迎搜索及关注:Crossin的编程教室

java中英文字幕和_为了边看美剧边学英语,我写了个字幕处理脚本相关推荐

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

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

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

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

  3. 为了边看美剧边学英语,我写了个字幕处理脚本

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

  4. 看美剧,学英语,背单词,赚美刀

    什么?学习背单词还可以赚钱?什么样的平台会给出这样的福利?今天要说的这款"美叨Mumbler"小程序就可以做到.是的,这款小程序最近搞了这样的活动,详细什么情况?下面就来给大家好好 ...

  5. 看美剧英文字幕学英语的利器——“深蓝英文字幕助手”简介

    我从初中开始基本上就是一个英语很烂的人,数理化再好有什么用,工作了,结果发现数理化都没啥用,最有用的还是当年学的最烂的英语.于是在2011年年底开始了学习英语的课程,在学习的过程中,外教经常会放英剧美 ...

  6. 完整技术帖,看美剧学英语之法

    经常打着学英语的旗号看电影,但是又只看中文字幕+画面,就是自欺欺人,一箭单雕就不错了还想一箭双雕. 转自:http://www.douban.com/group/topic/39303301/ 相信很 ...

  7. 看美剧学英文之最全攻略

    常听很多同学讨论用美剧学习英语到底有没有用,以及用哪部美剧练习等问题,我想说的是这只是一个参考,世界上没有绝对的事情,究竟有没有用看个人,如果学了几年甚至十几年的你到现在还无法衡量自己的英语水平或者依 ...

  8. BT被封,照样看美剧!

    这几天,各大网站,新浪.搜狐.CNbeta全都是在爆炒BTChina.龙漫BT.西摩BT站.凯神BT联盟等各大美剧和电影网站被封的消息.谁封的我没兴趣,怎么解决,我最感兴趣.当我们将自己的目光投向这些 ...

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

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

  10. 学英语看美剧学地道英文必看的10部美剧!

    学英语看美剧学地道英文必看的10部美剧 1.Desperate housewives 绝望主妇 时而压抑.时而诙谐.人物性格刻划得鲜明,只是觉得剧情不是那么贴近生活,不过里面的句子还有哲理性,几个主演 ...

最新文章

  1. 〔转〕Word域的应用和详解10_域的应用例子
  2. ASP.NET中 DropDownList+DetailsView(详细视图)的使用前台绑定
  3. win10 WSL windows subsystem for linux update setup wizard ended prematurely
  4. 线性链表java实现_java实现线性单链表
  5. windows和linux命令的区别,linux和windows命令区别
  6. centos6.4安装apache php mysql_CentOS 6.4配置Apache+PHP5+MySQL(lamp)环境以及报错处理思路...
  7. SchemaCrawler 9.4 发布,数据库结构输出
  8. mysql的主要指标_mysql 主要性能指标
  9. 笔记3:数字和数学计算
  10. 统计自然语言处理(第二版)学习笔记:第一章
  11. 基于vue的仿网易云音乐播放器
  12. 黑客工具包ShadowBrokers浅析
  13. 二进制转换为十六进制数是_将二进制数制转换为十六进制数制
  14. layui 弹出层 点击遮罩层关闭
  15. 亲测有效!解决文件名过长无法删除的情况
  16. 快速学习计算机系统编程
  17. 苹果手机怎么看生产日期?参考方法在这!
  18. (实战)Node.js 实现抢票小工具短信通知提醒
  19. cobar mysql5.6_Cobar init error
  20. Unity3d 物体速度快直接穿透墙体没有发生碰撞怎么办?

热门文章

  1. BPMN这点事-那段悲催的历史(下)XPDL、BPEL和BPDM之间的恩怨们
  2. VMware虚拟串口的设置与使用
  3. ll和du显示的文件大小不一致问题研究
  4. k8s集群Canal的网络控制
  5. 阿里云服务器价格,最新收费标准报价及活动价格表
  6. pytorch入门教程(一):Tensor###tensor好好好####
  7. Apollo-无人驾驶自定位技术*
  8. 微信小程序/小游戏运行环境小结
  9. AOP切面之实现计算器加减乘除--基于注解的方式
  10. 阿里巴巴宣布传承计划,没有马云的阿里会如何?