zoukankan      html  css  js  c++  java
  • 看美剧英文字幕学英语的利器——“深蓝英文字幕助手”简介

    我从初中开始基本上就是一个英语很烂的人,数理化再好有什么用,工作了,结果发现数理化都没啥用,最有用的还是当年学的最烂的英语。于是在2011年年底开始了学习英语的课程,在学习的过程中,外教经常会放英剧美剧给我们看,看了以后回答问题,讲解,挺有意思的。印象最深刻的就是Neil给我的Doctor Who还有另外一个外教放的Friends。后来在课程快结束的时候,萌发了一个想法,能不能只看英文字幕来看美剧(当然还有英剧),这样没有中文字幕的话才能在看美剧的过程中联系阅读与听力。但是美剧中很多词汇不懂,一旦句子中出现了两个不懂的词汇,那么这句话基本上就不懂是啥意思了。那么我能不能根据我的实际词汇量,对字幕就行修改,如果是认识的单词,那么就不管,如果是不认识的单词,那么就给出其中文意思,这样能够便于理解整个句子,而且在潜移默化中慢慢的提高词汇量。

    一年多前萌发的这个想法,于是按照这个思路写了一个字幕注释的小程序,可惜只写了一大半,然后由于工作的原因,就停了,最近突然想起这个东西,于是想能够把这个程序完成。(最近射手网和人人字幕组的关闭,让我觉得这个软件的必要)

    整个程序的设计思路是这样的:

    1.第一次运行这个程序时,需要设置词汇量,根据柯林斯词典提供的词频分级表,按词频分成5到0级词汇,0级最难最少用,5级最常用。用户根据对自己的估计进行选择,如果英语烂,那么就选择只认识5级词汇。如果英语不错,过了四六级那么可以选择4级或者3级,如果是英语专8水平啥的,可以选择更高级的词汇。选中后就会把这些等级的词汇记录到已认识的词汇表中(如果有些词不认识,可以通过用户词汇管理功能进行调整).

    2.提供生词本导入功能,如果用户是开心词场,有道词典之类的软件的用户,那么可以将这些软件的记录导入到这个程序中,便于完善用户自己的认识和不认识的词汇列表。

    3.用户下载带有英文字幕的srt或者ass格式的字幕文件,这个字幕文件可以是全英文的,也可以是中文英文都包含的,程序会将中文字幕全部移除,只保留英文字幕部分。

    4.对英文字幕中的每个句子进行转换和分解,分解成词汇,然后用分解出的词汇和用户词汇表进行比对,如果发现是用户认识的单词,那么就忽略,如果是用户不认识的单词,那么就查询字典(默认采用的是维科英汉词典10W词汇,基本满足日常词汇需要),得到该单词的中文解释,如果词典中查不到这个词,那么就忽略,查的到就显示出来。

    5.用户根据显示出来的所有词,再选择哪些是认识的,如果认识就可以标记为认识,以后也不会被注释。如果是不认识的,那么可能这个词存在多种注释,用户可以选择哪种注释在这个句子中更合理。

    6.根据用户选择,把英文字幕进行替代,不认识的词汇会在旁边加上简短的中文注释。如果用户觉得整句话都很难,想把整句话都翻译了,那么可以调用网上的翻译服务(有道,百度,微软,谷歌),对整句话进行翻译。

    7.用户可以进一步在界面上手工调整注释后的字幕,然后只需要保存这个替换后的英文字幕,然后用播放软件导入这个新字幕即可。

    在编写这个程序的时候,遇到了很多关于英语上的问题,挺有意思的,下面列举一下:

    1.如何得到一个单词的原型。

    英语单词有很多种变形,比如复数+s/es,过去式+ed,现在进行时+ing,比较级+er等,我们一般不会说认识单词do,却不认识单词doing,程序必须找到doing的原型do,然后再到用户词汇表中去查用户是否认识do这个词。这个我之前的处理办法很复杂,现在的处理办法很高效,很实用。

    2.如何知道一个词是人名/地名。

    在美剧中必然会大量的出现人名地名啥的,如果人名本身没有其他意义那还好说系统会忽略,但是如果人名有其他意义就会对整个句子的意思造成影响。比如He is Bush.这么一个句子,如果把Bush作为单词,那么就会翻译成“他是灌木丛”,这也太搞了,这里程序应该意识到Bush是人名,对于人名就不需要翻译。怎么知道一个单词是人名呢?我目前的做法简单粗暴直接,维护了一个常见的人名列表,如果首字母大写的,那么就查询这个人名列表,存在则说明是人名,不存在就当普通词汇处理。地名目前没有维护,没有处理,毕竟地名出现的频率没有人名高。

    3.对于一词多性多义,怎么判断取哪个意义。

    有些单词既可以做动词用,也可以做名词用,当名词时和动词时的意思完全不一样,这是一个问题。比如book,可以做n.那么就是书的意思,也可以做v.那么就是预定的意思。这两个意思毫无关联,那么怎么确定一个句子中的book到底是哪个http://blog.sina.com.cn/s/blog_48b0011f0102v6zc.html意思呢?

    一个是看是否变形,如果是booking或者booked,那么这是动词的变形,所以必然取动词的解释:预定。

    二是看前后单词的词性,如果book的前面是adj.那么这里的book就是名词。

    三分析整个句子,看book是做谓语还是主语/宾语,如果是谓语那就是动词,主语宾语就是名词。

    4.对于一词多义,而且词性还相同,那怎么取。

    这个有难度,我程序没办法解决,把每个意义都列出来,让用户根据上下文,自己选择。比如I like this date.这里Date可以是日期的意思,可以是约会的意思,也可以是枣子的意思,从语法上讲都是对的,只有根据上下文,让用户自己选择。

    5.原型和变形是两个单词,那么怎么决定采用原型还是变形。

    比如comforting是令人欣慰的意思,adj.,但是如果查原型comfort,只有n.和v.所以不能将comforting转换成原型再查下其意思,在作为形容词的时候,必须保持这个形式。还是只有从词性入手,如果是形容词,那么后面应该跟名词,如果是动词ing形式,那么应该是现在进行时的语法形式。

  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/studyzy/p/4118528.html
Copyright © 2011-2022 走看看