查看原文
其他

书评|耿强:Python自然语言处理工具在语料库和翻译研究中的应用——评《语料库与Python应用》

耿强 交大外语 2022-06-09

点击蓝字|关注我们

● 《东方翻译》2020年第5期 ●

Python自然语言处理工具在语料库和翻译研究中的应用

上海外国语大学语料库研究院

耿  强



    大数据时代,数据的容量激增,类型多样,传播加速,这“将语言服务业带入了一个全新的信息纪元”,信息处理技术成为新兴语言服务市场的“基础支撑”(王华树,2016:19)对于译者(包括研究者)而言,语言信息的处理无疑是最为基础的一项要求,与此相关度最大的莫过于语料库技术和自然语言处理技术两个方面。目前自然语言处理(NLP)所使用的计算机编程语言主要是Python,它的自然语言处理工具包(Natural Language Toolkit,简称NLTK,官网http://www.nltk.org/)是文本分析方面比较重要的,也是比较成熟的开源库之一,提供的接口可接入超过50种语料库和词汇资源。使用Python可以很容易地调用相应的库和模块,进行文本的分类、切分、词形还原、词干提取、标注、解析、聚类和情感分析等操作。Python为自然语言处理和语料库及翻译研究之间的沟通提供了强大的接口。然而市场上最近几年出版的大多数相关图书都只是介绍如何利用Python进行自然语言处理(参见Chopra  et al.,2016;Bhavsar et al.,2017;  Lane et al.,2019),并没有单独探讨Python在语料库研究中的应用。本文介绍的《语料库与Python应用》一书围绕语料库和翻译研究中的实际问题,以十分友好的编排方式向读者展示了Python编程在语料库以及翻译研究中的应用情况。它的出版将自然语言处理的方法和工具运用到语料库和翻译研究中,这对翻译实践者和研究人员来说是不可多得的入门书。








    《语料库与Python应用》由上海交通大学出版社于2018年7月推出,列入“语料库翻译学文库",作者是管新潮博士。该书一共8章,以由浅入深的顺序分布在除第1章绪论之外的上、中、下三篇。上篇有4章,展示了语料文本处理的基础性代码;中篇2章,组合使用上篇的基础性代码,处理Excel文件的输入、输出、语篇词汇密度、词汇复杂性、词长分布计算等具体任务;下篇1章涉及语料库的拓展应用。除此之外,该书还包括4个附录和1个索引,分别列出了与该书相关的加载模块与函数命令对应表,Python2和Python3不同版本部分代码区别表,部分NLTK自带语料库,汉英术语对照表等。


    本文将首先逐一介绍8个章节的主要内容,然后对其进行简要评述。


    第1章概述了语料库的基本知识,解释了为什么需要使用Python工具解决语料库研究中的问题和任务,并交待了书的内容和章节安排。上、中、下篇的内容按照Python工具使用的复杂程度和难度由浅入深进行组织。


    上篇包括第2章至第5章的内容,主要介绍了语料文本处理过程中所需要的Python基础性代码。第2章介绍了中英不同语言语料文本的读取和运行结果的输出。语料文本根据存储的位置不同分为三类,一是NLTK本身自带的语料库(包括Project Gutenberg、Brown Corpus、Inaugural Address Corpus、WordNet等),二是研究者自制的语料库,三是非独立存储的语料库(在Python代码编辑器中与代码一同显示的语料)。第一类语料可以通过调用NETK包中的不同模块进行加载,比较方便。最复杂的是第二类语料,它根据语料存储的格式分为txt(纯文本文档,一般采用UTF-8编码)、docx(Word文档)、xlsx(Excel文档)三类。三类语料文本所使用的Python代码在调用函数和使用方法的时候稍有不同。由于语料库所使用的语料文本一般默认格式为txt,该书也主要以此格式为讨论的主要对象。此外,由于中文不像英语,词与词之间没有空格,为了处理中文语料,必须先对它进行分词,因此和英文语料的读取相比,中文语料的读取需要安装并加载jieba中文分词工具。


    第3章“语料库应用的基础性代码”介绍了如何利用Python代码处理中英语料的停用词使用、文本降噪、文本的语言学处理、文本的语言信息处理等方面的内容。该章对中文语料处理的介绍比较简略。


    第4章“数据可视化”简单介绍了如何用三类可视化形式——表格、数据图和词云图——在两维空间中呈现语料文本分析的数据。表格可视化指的是把文本分析数据置于表格中,以增强词类与数字之间的关联性和可比性;数据图可视化是指把与词类相关的数字以一定的形状呈现出来,如词频图、柱状图、点状图等;词云图可视化可以显示某一语篇或一个语料库中主题词的呈现情况。上述可视化均使用的是条件概率分布函数ConditionalFreqDist(conditions, samples),它有条件和样本两个参数,通过使用这个函数的cfd.tabulate(conditions, samples)和cfd.plot(conditions, samples)方法,可以分别打印条件频率分布表格和绘制词频图形。不过,为了绘制柱状图和点状图,必须安装和加载NumPy库,这是Python语言专门用于处理数组和矩阵运算的扩展程序库。而词云图的绘制则必须加载词云图工具包WordCloud和Matplotlib绘图库中的pyplot模块。对于中文词云图绘制而言,必须先加载jieba模块进行分词。


    第5章“代码运行错误分析”介绍了与该书主题相关的十大代码运行错误类型,包括输入输出错误(IOError)、对象属性错误(AttributeError)、数据类型错误(TypeError)、变量名称错误(NameError)、索引错误(IndexError)、缩进错误(IndentationError)、参数类型错误(ValueError)、语法错误(SyntaxError)、Unicode解码错误(UnicodeDecodeError)、关键字错误(KeyError)。初学编程者在运行代码过程中经常会出现程序报错,若能够根据错误提示快速识别错误类型并有效排除,可提高编程者的编程和解决问题的能力。(管新潮,2018:89)


    中篇的第6章和第7章是Python编程的第二阶段,即利用上篇的基础性代码来完成特定的语料库研究与应用方面的任务。第6章“算法、代码与编程”主要介绍编写代码的流程和思路。这里所说的算法指的是设计如何解决问题并编写合适的代码实现任务要求的过程。算法设计的关键在于加载何种工具包,以及如何安排代码流程。(管新潮,2018:113)编写代码需要首先对代码的语言学意义有充分的了解,这样才能更髙效地完成任务。代码的字面意义有时会与语料库语言学中的意义有出入,如text.collocations()表示函数,collocations()用于提取text中的双连词,而语料库语言学中的collocation表示的是搭配。若提取其他的几连词,Python代码使用的函数是ngrams()处理同一个任务可以有不同的代码来实现,但不同代码在分词、降噪、停用词等方面会产生不同的结果,直接影响语料库的语言学统计。比如语料文本的语言学处理需要首先将文本转换成列表(list),方法有三个:word_tokenize()方法、split()方法、words()方法。用第1个和第3个方法分词的结果相同,单词和标点符号均被分词为相互独立的元素,而split()方法却把单词与标点符号合并成一个元素,这会导致相关语言学统计不准确。此外,采用这个方法不易清除标点符号,这样在后续的文本处理,比如在降噪和停用词处理时造成困难。因此,为了语料统计结果的精确性,建议在编程时选择words()方法或word_tokenize()方法,前者在代码行数方面更为精炼。


    第7章“基础性代码的语料库组合应用”以实际的6个任务为个案,展示了如何通过“提出问题、算法设计、对应代码、代码编程、问题思考”这5个步骤解决问题。这6个任务包括:以Excel文件格式输出术语(类符)、以Excel文件格式输出表格、语篇词汇密度的计算、语篇词汇复杂性的计算、语篇词长分布的计算、NLTK自带语料库的检索使用。该章所使用的代码编写方法不再采用列表编写法,而是采用自定义函数模块的方法,其优点在于用这种方法编写的代码段可以独立使用,而且可以针对特定目的组合使用不同的代码段,提髙了代码段的使用效率。


    下篇只有一章,即第8章“Python的语料库拓展应用”,为该书设定的Python编程的第三层次,目的在于通过实际的语料库研究问题,围绕它设计Python实现的代码。该章强调自主编程以解决实际问题的能力。七个案例分别是如何将单语语料导入Excel工作簿、文本中关键词组的检索、文本中特定词类的词形还原、专业语篇的术语提取、文本段落对齐、应用语言学文献计量研究的数据提取、专业通用词的提取。在最后一个任务中,作者基于Google发布的神经网络机器学习算法模型词汇向量word2vec训练N-gram语言模型,模型参数作为词汇的向量化表示,然后执行语义相似度计算,计算结果最终用于专业通用词的提取标准。作者设计的专业通用词提取算法由语料加载与预处理、候选词筛选、词向量生成与相似度计算、专业通用词提取以及分析与评价五大模块构成。(管新潮,2018:188)












    整体来看,该书具有以下几个方面的特点:

    (一)贯彻模块化理念。Python语言可以通过调用强大且丰富的第三方开源库和相应的模块处理各种问题。这也是该书在内容安排上所贯彻的理念。该书采取了模块化的处理,一方面以流程化思维分析具体问题,一方面将流程切分为可以独立存在的模块,使得这些模块相互之间可以自由组合,解决不同的问题和任务。该书上、中、下篇按照Python编程的难易度从基础到组合再到提髙进行编排,每一篇的内容都相对独立,不同程度的读者可以选择不同的篇章进行阅读。上篇中的每一个任务都包括代码、代码运行、代码解读三个部分。这些代码可以看作针对具体任务的解题模块,读者只需要将不同的代码模块组合到一起,就可以处理比较复杂的任务。这在该书的后两篇中得到了充分的应用。第7章展示的“提出问题、算法设计、对应代码、代码编程、问题思考”五步流程也是模块化理念的体现。


  (二)坚持语料库应用导向。该书的另一大特点是以语料库研究的实际任务和问题为导向,展示了如何通过分析处理任务和解决问题的步骤,然后思考如何在底层利用Python编程工具和技术解决问题。书中包含了大量的典型案例,它们是任何语料库研究中都必须进行的操作,如文本降噪、分句分词、去除停用词等,读者只需要复现书中的示例代码,稍微修改之后就可以很容易地拿来处理自己在语料库研究中遇到的类似问题。这种以语料库应用为导向的编写思路避免了单纯讲解Python编程所可能带来的无法髙效应用编程语言以解决实际问题的窘境,降低了有可能让读者陷入枝节的技术问题而产生的挫败感。


    (三)利用Python语言优势。语料库研究当前已经有不少独立的第三方工具,如WordSmith、AntConc、ParaConc、BFSU ParaConc等,它们本身具有比较丰富的功能,那么问题在于,为什么还要使用Python编程呢?与现有的语料库工具相比,Python的最大优势并非在于它可以代替前者,而是能够研制和开发语料库工具所不具有的新功能,进而拓展语料库的应用范围,提升语料库的适用性。(管新潮,2018:122)也就是说,Python工具可以最大限度地挖掘出文本数据有价值的内容。支撑Python这一语言优势的原因在于,它背后有十分强大的第三方开源库和网络上超级庞大的使用者社区,为解决各种复杂问题提供了开源代码和技术支持,极大地降低了这种语言工具的使用成本。这使得Python具有髙度的可定制性,用户只需要编写几行简洁的代码,就可以处理已有的语料库检索工具无法解决的问题,因此极大地满足了用户自我开发的需要。


    举个简单的例子,在涉及英汉语对的语料库翻译研究过程中,一个基础性的工作是对汉语文本进行分词处理。一般情况下,我们可以使用第三方工具,如中科院研发的“NLPIR汉语分词系统”(http://ictclas.nlpir.org/),但如果研究者需要根据特定的研究问题和对象进行定制处理,这时候Python的开源库就派上用场了。我们可以调用Python的中文分词包jieba进行中文文本分词,它有精确模式、全模式和搜索引擎模式三种。此外,还可以进行词性标注、关键词抽取等操作,且可以自定义词典。安装好jieba程序包之后,用importjieba进行调用,并用jieba.cut(text)等指令对文本进行分词。





    该书在如何通过Python编程使用自然语言处理技术服务于语料库研究方面做出了有益的探索,但不得不指出,它在一些地方也留下了少许遗憾和不足。


    (一)该书预设的读者对象与实际情况存在差距。第一章绪论里明确指出“本书的适用对象包括没有编程基础的学生和语料库实践者”,并表明“本书旨在教会读者使用Python工具”(管新潮,2018:3)。但在该书第9页就出现了代码,然而要想读懂文中的示例代码,不掌握一点Python编程基础知识是不行的。


    虽然作者会对每一个示例代码进行解读,但零基础的读者很难理解代码背后的意义,如什么是变量、怎样赋值、如何调用模块、如何选取参数、怎样处理不同的数据类型,等等。书中并无任何Python基础语法方面的介绍,显然,它是为具有一定Python基础的读者准备的。为了实现“教会读者使用Python工具”的目标,以及让文科生或者技术零基础者不再对纯技术产生畏惧心理,稍微介绍一下Python语言的基础语法是十分必要的,起码也应该提供一些入门参考书和网络视频供读者阅读或观看,如《Python进阶》(Head First Python, Paul Barry, 2011)和YouTube网站上的教学视频《跟我学Python》系列。


    (二)Python使用的版本问题。该书一直到第9页出现第一个示例代码之前都没有明确说明使用的Python版本是2.x系列。目前,Python版本已经升级了,笔者的笔记本电脑中安装的版本是Python3.7.0由于两者存在一些差别,且互不兼容,书中代码在复现过程中会出现错误,如在Python2.x中,》>print‘text’打印字符串是可以的,但Python3.x中必须加上括号,写成»>print(‘text’)这些版本上的变化给笔者在复现这些代码时造成了小小的麻烦。虽然该书附录里列出了Python2和Python3版本在部分代码上的不同,但并不全面。由于作者并未在文中说明里面大多数代码使用的是Python2,造成有的代码在Python3中无法运行,或者运行过程中报错,比如读取Word文档时,docxDocumentO在Python3里显示语法错误。Python官方宣布2020年之后将不再对Python2.7提供支持,这样看来选择Python3.x成为趋势,但由于Python2.x仍然带有很多成熟的第三方库,且有的在Python3.x中并不存在,因此选择哪个版本还要综合考虑“要解决什么问题、整个软件的生态系统、可使用的第三方库、架构和部署等”(Sarkar,2016:60)。


    为了解决Python不同版本的兼容问题,笔者跟该书作者进行了沟通,作者建议可以同时安装Anaconda2和Anaconda3两个版本。Anaconda是一款Python包管理和环境管理软件,一般用来配置不同的项目环境。它自动安装Python的相应版本、配置好环境变量及下载常用的第三方库和模块,省去了入门者在配置环境变量方面遇到的麻烦,是首选的集成开发环境。该书使用的是Anaconda2,但作者并未介绍该软件的安装以及如何使用Anaconda Prompt下载并安装相应的库和语料,如何使用Jupyter Notebook编写代码等。这些知识看上去好像没有什么技术难度,但对于入门者来说有必要交待一下。建议作者在下次修订的时候,加入一点这方面的内容。


    该书针对的读者并非Python、NLP或语料库方面的高级使用者,因此没有涉及Python支持的NLP的其他更高级的应用、工具和技术。Python在机器深度学习、人工智能等领域是主导性的编程语言,可以通过监督学习的方法,让机器学习不同类型文本的特征,然后就可以对未分类文本进行自动分类。文本特征的提取用到了很多模型,如词袋模型(Bag of Words Model)、TF-IDF模型(Term Frequency-Inverse Document Frequency Model)和词向量模型(Word Vectorization Model)。后者在Google于2013年发布的神经网络机器学习算法word2vec中得到应用。另外,使用Python自带的WordNet语料库进行语义分析,以及通过监督学习和无监督学习的方法对非结构性文本数据进行情感分析也是当前NLP领域非常热门的话题。(王天奇、管新潮,2017)


    Python支持的NLP在语料库和翻译研究方面有着十分广阔的应用前景,该书在这方面做了可贵的初步尝试,值得Python编程、NLP、语料库以及翻译研究等方面的学习者和研究者给予充分的关注。







参考文献


*本文转载自《东方翻译》2020年第5期第85页—88页,部分图片来自网络

原文链接:

https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDAUTO&filename=DFFY202005019&v=xrUYWrvY%25mmd2BtDZhWtQRWUXAUksxSFcp2ZMREF3GnJWVEjchJiCWk7C8%25mmd2FE1eTGxIpxK

语料库翻译学文库


《语料库与Python应用》


《语料库与Python应用》以如何在语料库的教与学及其应用、语料库科研中习得Python能力的逻辑关系为线索,描述了Python的价值、意义和作用,并将全书内容组合成可有效助力于Python能力习得的三个层次。第一层次是掌握与语料库相关的基础性代码;第二层次是这些基础性代码的活学活用;第三层次是以创新方式运用这些代码去解决与语料库相关的较为复杂的问题。Python是语料文本处理的利器,需要在一定的理念指导下方可充分理解其在特定领域内所呈现的特征,而本书的第一作用就是帮助读者去运用这一“语言+技术”理念,其次才是Python本身。

扫描上方二维码至

教育分社官方旗舰店购买

往期回顾

1. Python编程|上海交通大学外国语学院学生Python编程作业展示(1)

2. Python编程|上海交通大学外国语学院学生Python编程作业展示(2)

3. Python编程|上海交通大学外国语学院学生Python编程作业展示(3)

4. 叮咚,你的Python语料库更新请查收!《语料库与Python应用》更新分享!

5. 学术速递|校本英语水平考试与《中国英语能力等级量表》的对接研究——以“上海交通大学英语水平考试”为例

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存