(信阳农林学院外国语学院 河南 信阳 464000)
UNIX是一种操作系统,它最早是在20世纪60年代开发出来的,此后一直在不断发展。常规所说的操作系统,是指使计算机工作的整套程序。它是一个稳定、多用户、多任务的系统,适用于服务器、台式机和笔记本电脑。随着UNIX系统的衰落,越来越多新的操作系统开始崭露头叫,其中包括微软公司的Windows操作系统和苹果公司的Mac操作系统,这些新的操作系统推出了图形用户界面(GUI),提供了一个易于使用的环境。但是,对于图形化程序所不能覆盖的操作,但是依赖字符模式的Unix操作方式并没有被时代淘汰,接起Unix大旗的是一系列类Unix操作系统(Unix-like Operating Systems)。其中最显著的包括FreeBSD、OpenBSD、NetBSD以及Linux操作系统。
UNIX操作系统由三部分组成:内核、shell和程序。UNIX的内核是操作系统的中枢:它为程序分配时间和内存,并处理文件存储和响应系统调用的通信。shell作为用户和内核之间的一个接口。当用户登录时,登录程序检查用户名和密码,然后启动另一个名为shell的程序。shell是一个命令行解释器(CLI)。它对用户输入的命令进行解释,并安排这些命令的执行。这些命令本身就是程序:当它们终止时,shell会给用户另一个提示符。我们可以简单的认为,shell搭建起了程序与内核之间的桥梁,而shell同时也构筑了用户与操作系统之间的沟通之路。
Unix的哲学在于“小而精的工具,干好每一件事”。因而,利用Unix操作系统和Unix平台之上的工具工作,用户应当通过将若干小工具进行组合的方式,这种类似搭积木的工作模式,看似简单,但威力无穷。
自然语言处理(Natural Language Processing,简称NLP)就是用计算机来处理、理解以及运用人类语言(如中文、英文等),它属于人工智能的一个分支,是计算机科学与语言学的交叉学科,又常被称为计算语言学。由于自然语言是人类区别于其他动物的根本标志。没有语言,人类的思维也就无从谈起,所以自然语言处理体现了人工智能的最高任务与境界,也就是说,只有当计算机具备了处理自然语言的能力时,机器才算实现了真正的智能。
从研究内容来看,自然语言处理包括语法分析、语义分析、篇章理解等。从应用角度来看,自然语言处理具有广泛的应用前景。特别是在信息时代,自然语言处理的应用包罗万象,例如:机器翻译、手写体和印刷体字符识别、语音识别及文语转换、信息检索、信息抽取与过滤、文本分类与聚类、舆情分析和观点挖掘等,它涉及与语言处理相关的数据挖掘、机器学习、知识获取、知识工程、人工智能研究和与语言计算相关的语言学研究等。
而互联网的高速发展,使得自然语言处理的发展迎来了前所未有的机遇,海量的数据使得自然语言处理拥有了前所未有的资料库和档案馆,而计算机、智能手机等终端的大规模普及也使得对文本的数字化分析不再停留在实验室和论文之上,更多用户迫切的需要日常的、自动化的语言分析,例如每个用户都会使用的中文输入法,就需要有大量的自然语言处理工作在幕后发挥作用。而海量的视频、弹幕和社交媒体信息都需要自然语言处理来概括总结和提供前瞻性预测。尤其是在近年来,随着人工智能技术的飞速发展,凭借机器学习、深度学习和神经网络等技术的帮助,自然语言处理的精度、准确度和智能程度都得到了很大的改善,可以判断的是,未来的时代是属于人工智能的,而留给自然语言处理的舞台只会越来越大,需要进行自然语言处理的场景只会越来越多。而与此同时,传统语言学和文学工作中需要借助自然语言处理的地方也会越来越多。这个领域的跨学科的研究也会越来越多。
而词频分析,应当属于在进行自然语言处理过程中,一个基本的操作步骤。词频分析(Word Frequency Analysis)是对文献正文中重要词汇出现的次数进行统计与分析,是文本挖掘的重要手段。它是文献计量学中传统的和具有代表性的一种内容分析方法,基本原理是通过词出现频次多少的变化,来确定热点及其变化趋势。
威廉·莎士比亚(William Shakespeare,1564-1616)应该属于在中文世界里最为人所知的西方作家了,作为英国文学史上最杰出的戏剧家,也是西方文艺史上最杰出的作家之一,全世界最卓越的文学家之一,他的影响深远,其作品往往被视为英语语言文学的瑰宝。他流传下来的作品包括38部戏剧、154首十四行诗、两首长叙事诗和其他诗歌。戏剧创作是莎士比亚主要的成就。关于莎士比亚也存在许多传说,坊间一直流传莎士比亚是英国文学史上使用单词数量最大的作家,甚至认为其使用的单词总数远远超过同时代的其他作家。
首先,本文使用的莎士比亚全集来自于古腾堡计划。该文件为完整版的莎士比亚全集,但是首先需要去除部分无关文本,其中主要包括古腾堡计划的说明和一些版权信息。为了实现该目的,需要执行下述命令:
cat shakes.txt|sed-e’149260,149689d’|sed-e’1,141d’>shakes_new.txt
该命令将从尾部移除该文件14926到149689行的内容,上述内容均属与莎士比亚文本无关的元信息。
首先,让我们通过命令行工具看一下,整个干净的文本的基本统计学信息,包括行数、字符数、和单词总数。
cat shakes_new.txt|wc|awk’{print "Lines:" $1 " Words:" $2 " Character:" $3 }’
获得的数据为:行数:149118,单词总数:956209,字符总数:5827807。上面命令中,cat命令为提取整个文本,通过管道“|”将其输入到wc中来计算三个数据,最终利用awk命令来输出整个数据。这种操作方式,正是上文提到的“Unix哲学”,也就是“搭积木”的操作流程,通过简洁的小命令组合在一起,从而实现目的。
因为英语中存在大量干扰自然语言处理的元素,因此进行到这一步的时候需要对文本进行清洗,以便进一步分析。清理的内容包括:将文本转换为小写,去除所有的数字,去除所有的标点符号,以及去除高频词(隔断词)。当然处理方法并不限于这些步骤,要依赖处理和分析的目的而定。这里展示一些基本的文本处理。
首先,将现有文本里面所有的大写都转换成小写,并去掉所有的标点符号和数字。此处,借用Unix系统里的tr工具,该工具可以根据我们的指令将文本中的元素进行替换或者删除。
cat shakes_new.txt|tr’A-Z’’a-z’|tr-d[:punct:]|tr-d[:digit:]>shakes_new_cleaned.txt
得到的文本如下文所示(因为空间有限,只展示五行):
1 from fairest creatures we desire increase
2 that thereby beautys rose might never die
3 but as the riper should by time decease
4 his tender heir might bear his memory
5 but thou contracted to thine own bright eyes
现有的文本已经展现出和原始材料截然不同的面貌,下面的步骤至关重要,现在需要对文本进行分词(Tokenization),也就是将句子、段落分解为字词单位,方便后续的处理的分析。文本都是一些“非结构化数据”,我们需要先将这些数据转化为“结构化数据”,结构化数据就可以转化为数学问题了,而分词就是转化的第一步。
cat shakes_new_cleaned.txt|tr-sc ‘a-z’ ‘12’ > shakes_tokenized.txt
通过上述命令我们可以实现分词。得到按词来排列的一行一行的文本。这样,距离我们计算词频就只剩下最后一步了。通过下面两条命令,我们可以计算莎士比亚全集里出现频率最高的10个词以及频率最低的10个词。
catshakes_tokenized.txt|sort|uniq-c|sort-nr>shakes_sorted_desc.txt
catshakes_tokenized.txt|sort|uniq-c|sort-n>shakes_sorted_asc.txt
其中出现频率最高的是个词分别是:
29768 the 28276 and 21868 i 20805 to 18650 of 15933 a 14363 you 13191 my 11966 in 11760 that
出现频率最低的分别是:
1 aarons 1 abandoner 1 abatements 1 abatfowling 1 abbominable 1 abaissiez 1 abashd 1 abates 1 abbeys 1 abbots
可以发现的是,高频的词都是英语中最基本、最常用、最普遍的词,而那些出现频率最低的词,都是一些现代英语中很难一见的词。这一结论也基本符合我们的预期和判断。
通过对莎士比亚全集的分析,不难发现,利用Unix系统提供的工具构成的工具链,可以轻松的打造出一个高效简洁的流程,而在这个流程中,除了简明扼要这个最大的优势,同时也可以实现,每一步都可以自动输出结果,从而保证整个流程中容易了解每一步的进展,同时也最大程度上避免错误的发生。诚如上文所述,“杀鸡焉用宰牛刀”,使用短小的流程,实现目标,不失为一次成功的新的尝试。