北京学区房
我的老朋友,程序员老李,最近迷上了一个奇怪的东西——英语单词计数器。你说他一个后端工程师,整天跟Java打交道,怎么突然关心起英语单词了?
其实吧,这事儿还得从他儿子说起。他儿子今年小学五年级,英语成绩不太好,老李想给他找点乐子,让他别那么抵触学英语。他琢磨着,能不能写个程序,分析分析英文小说,看看里面哪些词出现的频率最高,然后让儿子先背这些高频词。
结果呢,这程序写着写着,老李自己倒是上瘾了。
第一次他写的版本,简直惨不忍睹。就一个循环,把文章里的所有单词都拆出来,然后用一个HashMap统计词频。效率低不说,各种标点符号、大小写、单复数形式,搞得他头都大了。count这个词和Count这个词,对他来说,算两个词!这结果,能用?
“老李,你这玩意儿,还不如用Excel呢!” 我当时毫不客气地嘲笑他。
老李不服气,他是什么人?那是搞Java的,处理大数据是他的强项。他开始研究各种文本处理的库,什么正则表达式,什么Porter Stemming算法,什么Lucene…… 简直武装到了牙齿。
他告诉我,真正的单词计数器,不是简单地把单词拆出来就完了。首先,你要把所有标点符号都去掉,然后把所有字母都变成小写,这样才能保证同样一个单词的不同形式都被正确地统计到。
接着,你还要考虑词干提取(Stemming)。比如说,running、ran、run,其实都是同一个词,应该只算一个。Porter Stemming算法就是用来做这个的,它可以把单词还原成它的词根形式。
最让老李头疼的是停用词(Stop Words)。像a、an、the、is、are这些词,出现的频率非常高,但是它们本身并没有什么实际意义,应该从统计结果中排除掉。
“这些停用词啊,简直是噪声!干扰我的统计结果!” 老李抱怨道。
他从网上找了一个停用词列表,里面密密麻麻地列了几百个单词。每次处理文章之前,他都要先把这些词过滤掉。
有了这些工具,老李的英语单词计数器终于像模像样了。他用它来分析《哈利·波特》、《傲慢与偏见》这些英文名著,结果发现,出现频率最高的单词,果然是那些常见的停用词。
排除掉这些停用词之后,剩下的高频词,才是真正有意义的。比如,在《哈利·波特》里,出现频率最高的单词是Harry、Ron、Hermione、Voldemort。这说明什么?这说明这本书主要讲的就是哈利、罗恩、赫敏和伏地魔的故事嘛!
老李还把这个程序做成了一个简单的网页应用,可以上传英文文本文件,然后自动统计词频。他还把结果用图表的形式展示出来,让用户可以更直观地了解文章的词汇构成。
“怎么样?我这玩意儿,比Excel强多了吧?” 老李得意地说。
我不得不承认,他的英语单词计数器确实挺有意思的。我试着上传了一篇我写的英文论文,结果发现,我最常用的单词居然是“however”。这让我有点尴尬,看来我的写作风格还是太生硬了。
老李说,他现在正在考虑把这个程序和自然语言处理技术结合起来,做一些更高级的功能。比如,自动提取文章的关键词,或者分析文章的情感倾向。
“以后啊,说不定我还能用它来写诗呢!” 老李笑着说。
我心想,老李啊老李,你真是越玩越大了。不过,我也挺佩服他的。一个程序员,居然能把英语单词计数器玩出这么多花样,也算是有点本事了。
说真的,老李的经历也启发了我。有时候,我们学习英语,总是想着背单词、语法,却忽略了英语的实际应用。如果我们能像老李一样,把英语和自己的兴趣爱好结合起来,也许就能找到学习英语的乐趣。
对了,我突然想到,我也可以用老李的英语单词计数器来分析一下我喜欢的英文歌曲的歌词,看看里面都用了哪些高频词。也许,这能帮助我更好地理解歌词的含义,也能提高我的英语水平。
嗯,就这么定了,明天就试试!
相关问答