编译丨Linsa
原作丨Tomi Mester
半年前我跟女友一起搬到了瑞典。
由于这里几乎每个人都会说英文,我们这些外派人员的日子并不难熬。但尽管如此,我们还是想入乡随俗学习一些日常瑞典语对话。

学瑞典语对于我来说只是个爱好,所以我也不想逼得自己太紧。于是我通过简单的设想和计划,明确了我目标是花10 - 20个小时学到80%的日常对话。
随后,我利用初级的数据科学思维来帮助自己完成这个看似不可能的任务。
基本概念
下面是我用数据科学的创意玩法:
  1. 首先,我选了两部热门电视剧,分别是《老友记》和《老爸老妈的浪漫史》
  2. 然后,我下载到了这两部电视剧每一集的瑞典字幕
  3. 之后,我分析出最常出现的单词,并且按照出现频率对词汇进行了排序
  4. 最后,我选择出现频率最高的1000个单词
那么问题来了,究竟这1000个单词能帮我达到一个什么样的水平呢?或者说,这1000个单词到底能覆盖多少日常中的对话呢?为了解决心中疑惑,我给自己写了一小段数据脚本。另外,我这个方法适用于任何一种欧洲语言。
代码
第一步就是先找到字幕,这可以是来自任何你喜欢的一部或多部的电影。由于之前我看过这两部剧的英文版,并且我想选两部用词贴近生活的影片,于是最后敲定了《老友记》和《老爸老妈的浪漫史》。
在有了字幕之后,我们需要一个工具去完成文本分析。我们在这一步可以选择Python、R、SQL和Bash中的任一语言,但我选了最简单的Bash,简单到只需要一行代码就可以完成整个分析。在下面的截图中我把代码分解成了14行,以便大家理解。
那么这些代码什么意思呢?总体来说,前9行是起数据清洗(data cleaning)作用,剩下5行是起分析作用,下面我一行行来解释:
第一行:读取所有保存在我数据服务器里的字幕文件。从现在起,把这所有字幕当做一个整体的临时文本文件,之后我做的所有进一步的改动都是基于这个整体文本上的。 
第二行:删除所有以数字开头的行(比如,时间戳)
第三行:替换所有的问号,感叹号,句号,竖线分隔符成为空格
第四行:替换所有连续空格为一个空格
第五行:删除所有除字母,撇号和空格以外的一切
第六行:删除每行开头不必要的空格
第七行:把所有空格变成换行符,也就是每个单词占一行
第八行:删除所有空行
第九行:把所有大写字母变成小写字母
于是我就得到了下图所展示的列表。当然,不少单词都出现了不止一次。
第十行:把这些单词按照首字母顺序排列
第十一行:列出所有出现过的单词,以及它们分别出现的次数
第十二行:按照出现的频率把这些单词从高到低排列
第十三行:删除行开头的空格
第十四行:把前1000个单词写入一个名为“1000.csv”的文件里
大功告成!
分析结果
现在我已经有了所需要的1000个单词。下一个问题就是:如果我只学这1000个单词,我能明白多少日常对话?为了回答这个问题,我需要两个数据:
  1. 我需要算出字幕里的总单词数(重复出现的单词也重复累加)
  2. 我需要算出这1000个单词在总单词数中占的比例
对比这两个数据会得出这1000个单词的使用率。
我们再回到代码上,为了得到第一个数据,我把第14行换成以下代码:
awk ‘{sum += $1} END {print sum}’
可以得出所有字数统计:1131360,然后同样的,把新建的1000.csv文件也进行统计:
awk ‘{sum += $1} END {print sum}’ 1000.csv
可以得出这1000个单词总的出现次数:964682
然后见证奇迹的时刻到了!
964682/1131360= 85.26%
没错,这说明了如果我学会了从《老友记》和《老爸老妈的浪漫史》提取出的这1000个单词,我就可以明白其中85%的字幕!
用实际的例子说明,这张是我周末在宜家拍的照片,实际上只需要把列表上前200个单词学会就能看得懂这图上标题里的所有单词。
下表说明了当你学会了列表中最常出现的X个单词,相对应的,你就能理解Y%字幕。
数据结果呈现出一条未经加工过的完美对数函数线!非常明显的是,学会这1000个单词,你会得到85%的效益!边际成本太惊人了!

后台回复“资源”即可下载海量免费学习资源
你可能错过了:
继续阅读
阅读原文