Python自然语言处理(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-18 09:28:24

点击下载

作者:[美]Steven Bird Ewan Klein Edward Loper

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python自然语言处理

Python自然语言处理试读:

前言

这是一本关于自然语言处理的书。所谓“自然语言”,是指人们日常交流使用的语言,如英语、印地语、葡萄牙语等。相对于编程语言和数学符号这样的人工语言,自然语言随着一代代的传递而不断演化,因而很难用明确的规则来确定。从广义上讲,“自然语言处理”(Natural Language Processing,NLP)包含所有用计算机对自然语言进行的操作,从最简单的通过计数词汇出现的频率来比较不同的写作风格,到最复杂的完全“理解”人所说的话,或至少达到能对人的话语作出有效反应的程度。

NLP的技术应用日益广泛。例如:手机和手持电脑对输入法联想提示和手写识别的支持;网络搜索引擎能搜索到非结构化文本中的信息;机器翻译能把中文文本翻译成西班牙文。通过提供更自然的人机界面和获取存储信息的高级手段,语言处理正在这个多语种的信息社会中扮演着更核心的角色。

这本书提供自然语言处理领域的入门指南。它可以用来自学,也可以作为自然语言处理或计算语言学课程的教科书,或是作为人工智能、文本挖掘、语料库语言学课程的补充读物。本书实用性强,包括上百个实例和分级练习。

本书基于Python编程语言及名为自然语言工具包(Natural Language Toolkit, NLTK)的开源库。NLTK包含大量的软件、数据和文档,所有这些都可以从http://www.nltk.org/上免费下载。NLTK的发行版本支持Windows、Macintosh和UNIX平台。强烈建议你下载Python和NLTk,与我们一起尝试书中的例子和练习。读者

从科学、经济、社会和文化因素来看,NLP十分重要。NLP正在迅速成长,其中很多理论和方法在大量新的语言技术中得到广泛应用。所以对很多人来说掌握NLP知识十分重要。在应用领域,包括从事人机交互、商业信息分析、Web软件开发的人;在学术界,包括从事人文计算学、语料库语言学到计算机科学和人工智能领域的人。(学术界的很多人把NLP称为“计算语言学”)

本书旨在帮助所有想要学习编写程序来分析书面语言的人,不管他们以前的编程经验如何。

初学编程?

本书的前几章适合没有编程经验的读者,只要你不怕应对新概念和学习新的计算机技能。书中的例子和数以百计的分级练习,你都可以亲自尝试一下。如果你需要关于Python的更一般的介绍,http://docs.python.org/给出了Python资源列表。

初学Python?

有经验的程序员可以很快掌握书中的Python代码,而把更多精力专注于自然语言处理。所有涉及的Python功能都经过精心解释和举例说明,你很快就会体会到Python在这些应用领域的妙用。书中的语言索引会帮你查找书中的相关论述。

已经精通Python?

你可以浏览一下Python的例子并且钻研从第1章开始就提到的语言分析材料。很快你就能在这个神奇的领域展现你的技能。强调

本书是一本介绍NLP的实用书籍。你将通过例子学习编写真正的程序,并通过实践验证自己想法的价值。如果你没有学过编程,本书将教你如何编程。与其他编程书籍不同的是,我们提供了丰富的NLP实例和练习。我们撰写本书时讲究探究原理,无论是严谨的语言学还是计算分析学,我们不回避所涉及的任何基础理论。我们曾经试图在理论与实践之间寻求折中,确定它们之间的联系与边界。最终我们认识到如果不能寓教于乐,几乎无法实现这个目标,所以我们竭尽所能写入了很多既有益又有趣的应用和例子,有的甚至有些异想天开。

请注意本书并不是一本工具书。本书讲述的Python和NLP是精心挑选的,并通过教程的形式展现的。关于参考材料,请查阅http://python.org/和http://www.nltk.org/,那里有大量可搜索的资源。

本书也不是高深的计算机科学文章。书中的内容属于入门级和中级,目标读者是那些想要学习如何使用Python和自然语言分析包来分析文本的人。若想学习NLTK中更高级的算法,你可以查阅http://www.nltk.org/中的Python代码库,或查询在本书中引用的其他文献。你将学到什么

通过钻研本书,你将学到如下内容:● 简单的程序如何帮你处理和分析语言数据,以及如何编写这些程

序;● NLP与语言学的关键概念是如何用来描述和分析语言的;● 数据结构和算法是怎样在NLP中运用的;● 语言数据如何存储为标准格式,以及如何使用数据来评估NLP技

术的性能。

根据读者知识背景和学习NLP的动机不同,从本书中获得的技能和知识也将不同,详情见表P-1。

表P-1 目标和背景不同的读者,阅读本书可获得的技能和知识目标艺术与人文背景科学与工程背景操控大型语料库,设计使用数据建模、数据挖掘语言语言模型,验证由经验得出和知识发掘的技术来分析自然分析的假设语言语言应用NLP技术构建高效的在高效的语言处理软件中技术系统来处理语言学任务使用语言学算法和数据结构篇章结构

本书前几章按照概念的难易程度编排。先是实用地介绍语言处理,讲述如何使用小的Python程序分析感兴趣的文本信息(第1~3章)。接着是结构化程序设计章节(第4章),用来巩固散布在前面几章中学习的编程要点。之后,加快速度,我们用一系列章节讲述语言处理的基本原理:标注、分类和信息提取(第5~7章)。接下来的3章探索了句子解析、句法结构识别和句意表达方法构建(第8~10章)。最后一章重点讲述了如何有效管理语言数据(第11章)。本书结尾处的后记简要讨论了NLP领域的过去和未来。

每一章中我们都在两种不同的叙述风格间切换。一种风格是以自然语言为主线。我们分析语言,探索语言学概念,在讨论中使用编程的例子。我们经常会使用尚未系统介绍的Python结构,这样你可以在钻研这些程序如何运作的细节之前了解它们的用处。就像学习一门外语的惯用表达一样,你能够买到好吃的糕点而不必先学会复杂的提问句型。另一种风格是以程序设计语言为主线。我们分析程序、探索算法,而不以语言学例子为主。

每章结尾都有一系列分级练习,用于巩固所学的知识。练习按照如下的标准分级:○初级练习,对范例代码稍加修改等简单的练习;◑中级练习,深入探索所学知识的某个方面,需要仔细地分析和设计;●高级练习,开放式的任务,挑战你对所学知识的理解并要求你独立思考解决的方案(新学编程的读者可以跳过这些)。

每一章都有深入阅读环节和放置在http://www.nltk.org/网站上的“额外内容”部分,用来介绍更深入的相关材料及一些网络资源。所有实例代码都可从网上下载。为什么使用Python?

Python是一种简单但功能强大的编程语言,其自带的函数非常适合处理语言数据。Python可以从http://www.python.org/免费下载,并能够在各种平台上安装运行。

下面的4行Python程序就可以操作file.txt文件,输出所有后缀是“ing”的词。   >>> for line in open("file.txt"): ... for word in line.split(): ... if word.endswith('ing'): ... print word

这段程序演示了Python的一些主要特征。第一,使用空白符号缩进代码,从而使if后面的代码都在前面一行for语句的范围之内;这能保证对每个单词都能进行“ing”结尾检测。第二,Python是面向对象语言。每一个变量都是包含特定属性和方法的实例。例如:变量“line”的值不仅仅是一行字符串,它是一个string对象,包含用来把字符串分割成词的split()方法(或叫操作、函数)。我们在对象名称后添加句号(点)和方法名称就可以调用对象的一个方法,即line.split()。第三,方法的参数写在括号内。例如:上面例子中的word.endswith('ing'),参数“ing”表示我们需要找的是以“ing”结尾的词而不是别的结尾的词。最后也是最重要的,Python的可读性非常强可以很容易地猜出程序的功能,即使你以前从未写过一行代码。

选择Python是因为它的学习曲线比较平缓,文法和语义都很易懂,具有强大的字符串处理功能。作为解释性语言,Python便于交互式编程。作为面向对象语言,Python允许数据和方法被方便地封装和重用。作为动态语言,Python允许属性在等到程序运行时添加到对象,允许变量自动类型转换,提高开发效率。Python自带强大的标准库,包括图形编程、数值处理和网络连接等组件。

Python在世界各地的工业、科研、教育领域应用广泛,因其提高了软件的生产效率、质量和可维护性而备受欢迎。http://www.python.org/about/success/列举了许多成功使用Python的例子。

NLTK定义了使用Python进行NLP编程的基础工具。它提供了与自然语言处理相关的数据表示基本类,词性标注、文法分析、文本分类等任务的标准接口及这些任务的标准实现,可以组合起来解决复杂的问题。

NLTK自带大量文档。作为本书的补充,http://www.nltk.org/网站提供的API文档涵盖了工具包中每一个模块、类和函数,详细说明了各种参数,以及用法示例。该网站还为广大用户、开发人员和导师提供了很多包含大量的例子和测试用例的HOWTO。软件安装需求

为了充分利用好本书,你应该安装一些免费的软件包。http://www.nltk.org/上有这些软件包当前的下载链接和安装说明。

Python

本书的例子都假定你正在使用Python 2.4或2.5版本。一旦NLTK依赖的库支持Python 3.0,我们将把NLTK移植到Python 3.0。

NLTK

本书的代码示例使用NLTK 2.0版本。NLTK的后续版本是兼容的。

NLTK-Data

包含本书中所分析和处理的语言语料库。

NumPy(推荐)

这是一个科学计算库,支持多维数组和线性代数,在某些概率计算、标记、聚类和分类任务中会用到。

Matplotlib(推荐)

这是一个用于数据可视化的2D绘图库,在产生线图和条形图的程序例子中会用到。

NetworkX(可选)

这是一个用于存储和操作由节点和边组成的网络结构的函数库。实现可视化语义网络还需要安装Graphviz库。

Prover9(可选)

这是一个使用一阶等式逻辑的定理自动证明器,用于支持语言处理中的推理。自然语言工具包(NLTK)

NLTK创建于2001年,最初是宾州大学计算机与信息科学系计算语言学课程的一部分。从那以后,在数十名贡献者的帮助下不断发展壮大。如今,它已被几十所大学的课程所采纳,并作为许多研究项目的基础。表P -2列出了NLTK的一些最重要的模块。

表P-2 语言处理任务与相应NLTK模块及功能描述语言处理任NLTK模块功能描述务nltk.获取语语料库和词典的标准化接口corpus料库nltk.字符串tokenize, 分词、句子分解、提取主干处理nltk.stem搭配探nltk.t-检验、卡方、点互信息collocations究词性标n-gram、backoff、Brill、HMM、nltk.tagTnT识符nltk.决策树、最大熵、朴素贝叶斯、classify, 分类EM、k-meansnltk.clusternltk.分块正则表达式、n-gram、命名实体chunknltk.图表、基于特征、一致性、概率性、依赖项解析parsenltk.语义解sem, nltk.λ演算、一阶逻辑、模型检验释inference指标评nltk.精度、召回率、协议系数metrics测nltk.概率与频率分布、平滑概率分布probability估计nltk.app, 图形化的关键词排序、分析器、WordNet查应用看器、聊天机器人nltk.chat语言学nltk.处理SIL工具箱格式的数据领域的工作toolbox

NLTK设计中的4个主要目标如下。

简易性

提供直观的框架和大量模块,使用户获取NLP知识而不必陷入像标注语言数据那样繁琐的事务中。

一致性

提供具有一致的接口和数据结构并且方法名称容易被猜到的统一框架。

可扩展性

提供一种结构使得新的软件模块可以方便添加进来,模块包括同一任务中不同的或相互冲突的实现方式。

模块化

提供可以独立使用而与工具包的其他部分无关的组件。

对比上述目标,我们回避了工具包的潜在实用性。首先,虽然工具包提供了广泛的工具,但它不是面面俱全的。第一,它是一个工具包而不是一个系统,它将会随着NLP领域一起发展。第二,虽然这个工具包的效率足以支持实际的任务,但它运行时的性能还没有高度优化。这种优化往往涉及更复杂的算法或使用C或C++等较低一级的编程语言来实现。这将使得工具包的可读性变差且更难以安装。第三,我们试图避开巧妙的编程技巧,因为我们相信清楚直白的实现比巧妙却可读性差的方法好。对老师的话

自然语言处理一般是在高年级本科生或研究生阶段开设的为期一个学期的课程。很多教师都发现,在如此短的时间里涵盖理论和实践两个方面是十分困难的。有些课程注重理论而排除掉实践练习,这剥夺了学生编写程序自动处理语言带来的挑战和兴奋感。另一些课程仅仅教授语言学编程而不包含任何重要的NLP内容。最初开发NLTK就是为了解决这个问题,无论学生之前是否具有编程经验,都能使教师在一个学期里同时教授大量理论和实践成为可能。

在所有NLP教学大纲中算法和数据结构部分都十分重要。它们本身可能非常枯燥,而NLTK提供的交互式图形用户界面能让读者一步一步看到算法过程,使它们变得鲜活。大多数NLTK组件都有一个无需用户输入任何数据就能执行有趣任务的示范性例子。学习本书的一种有效方法就是通过交互式重现书中的范例,把它们输入到Python会话控制台,观察它们的功能,尝试修改它们去探索经验性问题或者理论性问题。

本书包含了数百个练习,可作为学生作业。最简单的练习包括用指定的方式修改已有的程序片段来回答具体的问题。另一方面,NLTK为研究生水平的研究项目提供了一个灵活的框架,包括所有的基本数据结构和算法的标准实现,几十个广泛使用的数据集(语料库)的接口,以及一个灵活可扩展的体系结构。NLTK网站上还有其他资源可以支持NLTK教学。

我们相信本书是唯一能为学生提供在学习编程的环境中学习NLP的综合性教程。各个章节和练习通过与NLTK紧密结合,并将各章材料有序分割开,为学生(即使是那些以前没有编程经验的学生)提供一个实用的NLP的入门指南。学完这些材料后,学生能准备好尝试一本更加深层次的教科书,例如:Speech and Language Processing(《语音和语言处理》),作者是Jurafsky和Martin(Prentice Hall出版社,2008年)。

本书介绍编程概念的顺序与众不同。以一个重要的数据类型:字符串列表(链表)开始,然后介绍重要的控制结构,如推导和条件式等。这些常用知识允许我们在一开始就做一些有用的语言处理。当有了这样动机,我们再回过头来系统地介绍一些基础概念,如字符串、循环、文件等。这种方法同更传统的方法相比,达到了同样的效果而不必要求读者对编程感兴趣。

表P-3列出了两个课程计划表。第一个适用于艺术人文专业背景的读者,第二个适用于科学与工程背景的读者。其他的课程计划应该涵盖前5章,然后把剩余的时间投入单独的领域,例如:文本分类(第6、7章)、文法(第8、9章)、语义(第10章)或者语言数据管理(第11章)。

表P-3 课程计划建议(每一章近似的课时数)章艺术人文专业理工科第1章 语言处理与Python2~42第2章 获得文本语料和词汇资源2~42第3章 处理原始文本2~421~第4章 编写结构化程序2~422~第5章 分类和标注词汇2~442~第6章 学习分类文本0~242~第7章 从文本提取信息242~第8章 分析句子结构2~441~第9章 建立基于特征的文法2~441~第10章 分析语句的含义1~241~第11章 语言数据管理1~2418总计18~36~36本书使用的约定

本书使用以下印刷约定。

黑体

表示新的术语。

斜体

用在段落中表示语言学例子、文本的名称和URL,文件名和后缀名也用斜体。

等宽字体

用来表示程序清单,用在段落中表示变量、函数名、声明或关键字等程序元素。也用来表示程序名。

等宽斜体

表示应由用户提供的值或上下文决定的值来代替文本中的值,也在程序代码例子中用来表示元变量。

这个图标表示提示、建议或一般性的提醒。

这个图标表示警告使用代码范例

本书是为了帮你完成工作的。一般情况下,你可以在你的程序或文档中使用本书中的代码,而不需要得到我们的允许,当你需要大量地复制代码时除外。例如,编写程序时用到书中的几段代码不需要许可。销售和分发包含O'Reilly书籍中例子的CD-ROM需要获得许可。援引本书和书中例子来回答问题不需要许可。大量地将本书中的例子纳入你的产品文档将需要获得许可。

我们希望但不强求被参考文献引用。引用通常包括标题、作者、出版者和ISBN。例如:“Natural Language Bocessing with Rthow,Steven Bird,Ewan Klein和Edward Loper。版权所有2009 Steven Bird, Ewan Klein和Edward Loper, 978-0-596-51649-9。”如果你觉得你使用本书的例子代码超出了上面列举的一般用途或许可,请通过permissions@oreilly.com随时联系我们。®Safari在线丛书®

当你看到任何你喜爱的技术书的封面上印有Safari在线丛书的图标时,这意味着这本书可以在O'Reilly网络Safari书架上找到。

Safari提供比电子书更好的解决方案。它是一个虚拟图书馆,你可以轻松搜索数以千计的顶尖技术书籍,可剪切和粘贴例子代码,并下载一些章节,在你需要最准确最新的信息时快速找到答案。欢迎免费试用http://my.safaribooksonline.com。如何联系我们

关于本书的意见和咨询请写信给出版商。

O'Reilly Media公司

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807(100035)

奥莱利技术咨询(北京)有限公司

我们为本书的勘误表、例子等信息制作了一个网页。你可以访问这个页面:

http://www.oreilly.com/catalog/9780596516499

作者通过NLTK网站提供了各章的其他材料:

http://www.nltk.org/

要发表评论或询问有关这本书的技术问题,发送电子邮件至:

bookquestions@oreilly.com

欲了解更多有关我们的书籍、会议、资源中心和O'Reilly网络的信息,请参阅我们的网站:

http://www.oreilly.com致谢

作者感激为本书早期手稿提供反馈意见的专家,他们是:Doug Arnold、Michaela Atterer、Greg Aumann、Kenneth Beesley、Steven Bethard、Ondrej Bojar、Chris Cieri、Robin Cooper、Grev Corbett、James Curran、Dan Garrette、Jean Mark Gawron、Doug Hellmann、Nitin Indurkhya、Mark Liberman、Peter Ljunglöf、Stefan Müller、Robin Munn、Joel Nothman、Adam Przepiorkowski、Brandon Rhodes、Stuart Robinson、Jussi Salmela、Kyle Schlansker、Rob Speer和Richard Sproat。感谢学生和同事们,他们对课堂材料的宝贵意见演化成本书的相关章节,其中包括巴西、印度和美国的NLP与语言学暑期学校的参加者。没有NLTK开发社区的成员的努力就不会产生这本书,他们为建设和壮大NLTK无私奉献了他们的时间和专业知识,他们的名字都记录在NLTK网站上。

非常感谢美国国家科学基金会、语言数据联盟、Edward Clarence Dyason奖学金、宾州大学、爱丁堡大学和墨尔本大学对本书相关工作的支持。

感谢Julie Steele、Abby Fox、Loranah Dimant及其他O’Reilly团队成员。他们组织大量NLP和Python社区成员全面审阅我们的手稿,还主动为满足我们的需要而定制O'Reilly的生成工具。感谢他们一丝不苟的审稿工作。

最后,深深地感谢我们的合伙人,他们是Kay、Mimo和Jee。感谢在我们写作本书的几年里他们付出的关心、耐心和支持。我们希望我们的孩子——Andrew、Alison、Kirsten、Leonie和Maaike——能从这些页面中感觉到我们对语言和计算的热情。版税

这本书的版税将用来支持自然语言工具包的发展。图P-1. Edward Loper、Ewan Klein和Steven Bird,斯坦福大学,2007年7月第1章语言处理与Python

我们能够很容易地得到数百万数量级的文本。假设我们会写一些简单的程序,那可以用它来做些什么?本章将解决以下几个问题。(1)通过将技术性较简单的程序与大规模文本结合起来,我们能实现什么?(2)如何自动地提取出关键字和词组,用来总结文本的风格和内容?(3)Python编程语言为上述工作提供了哪些工具和技术?(4)自然语言处理中有哪些有趣的挑战呢?

本章分为风格完全不同的两部分。在1.1节,我们将进行一些与语言相关的编程练习而不去解释它们是如何实现的。在1.2节,我们将系统地回顾关键的编程概念。我们使用章节标题来区分这两种风格,而后面几章则不像前面一样,是将两种风格混合在一起,不作明显的区分。我们希望这种介绍风格能使你对将要出现的内容有一个真实的体会,与此同时,介绍中还涵盖了语言学与计算机科学的基本概念。如果你对这两个方面已经有了基本的了解,可以直接从1.5节开始学习。我们将在后续的章节中重复所有要点,如果错过了什么,你可以很容易地在http://www.nltk.org/上查询在线参考材料。如果这些材料对你而言是全新的,那么本章所提出的问题比它还要多,这些问题将在本书的其余部分中进行讨论。1.1 语言计算:文本和词汇

我们都对文本非常熟悉,因为我们每天都在进行阅读和写作。在本书中,把文本视为编写程序的原始数据,并通过很多有趣的编程方式来处理和分析文本。但在能写这些程序之前,必须得从了解Python解释器开始。Python入门

Python与用户友好交互的方式之一包括你可以在交互式解释器直接输入代码——解释器将运行你的Python代码的程序。你可以通过一个叫做交互式开发环境(Interactive Development Environment,IDLE)的简单图形接口来访问Python解释器。在Mac上,你可以在“Applications→MacPython”中找到;在Windows中,你可以在“程序→Python”中找到。在UNIX下,你可以在shell输入“idle”来运行Python(如果没有安装,尝试输入python)。解释器将会输入关于你的Python的版本简介,请检查你是否运行在Python 2.4或2.5(这里是2.5.1)。Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26)[GCC 4.0.1 (Apple Inc. build 5465)] on darwinType "help", "copyright", "credits" or "license" for more information.>>>

如果你无法运行Python解释器,可能是由于没有正确安装Python。请访问http://python.org/查阅详细操作说明。

提示符>>>表示Python解释器正在等待输入。复制这本书的例子时,自己不要键入>>>。现在,把Python当作计算器使用。>>> 1 + 5 * 2 - 38>>>

一旦解释器完成计算并显示出答案,提示符就会重新出现。这表示Python解释器在等待另一个指令。轮到你来

输入几个自己的表达式。可以使用星号(*)表示乘法,左斜线表示除法,可以用括号括起表达式。请注意:除法并不总是像你期望的那样。当输入1/3时,是整数除法(小数会被四舍五入),当输入1.0/3.0时,是“浮点数”(或十进制)除法。要想获得通常平时期望的除法(在Python3.0中的标准),需要输入:from __future__import division。

前面的例子展示了如何使用Python交互式解释器,体验Python语言中各种表达式,看看它们能做些什么。现在让我们尝试一个无意义的表达式,看看解释器将如何处理。>>> 1 +  File "", line 1   1 +    ^ SyntaxError: invalid syntax >>>

结果产生了一个语法错误。在Python中,指令以加号结尾是没有意义的。Python解释器会指出发生错误的行(的第1行,表示“标准输入”)。

现在我们学会使用Python解释器了,已经准备好开始处理语言数据了。NLTK入门

首先应该安装NLTK,可以从http://www.nltk.org/上免费下载。按照说明下载适合你的操作系统的版本。

一旦安装完成,便可像前面那样启动Python解释器。在Python提示符后面输入下面两行命令来安装本书所需的数据,然后选择book,如图1-1所示。>>> import nltk>>> nltk.download()图1-1 下载NLTK图书合集:使用nltk.download()浏览可用的软件包。下载器上的Collections选项卡显示软件包如何被打包分组,然后选择book标记所在行,可以获取本书所有例子和练习需要的全部数据。这些数据需要100MB硬盘空间,包括约30个压缩文件。完整的数据集(即下载器中的所有)大约是这个大小的5倍(在本书写作期间),并且还在不断扩充

一旦数据被下载到你的机器,你就可以使用Python解释器加载其中的一些了。第一步是在Python提示符后输入一个特殊的命令,告诉解释器去加载一些我们要用的文本:from nltk.book import * 。这条语句是说“从NLTK的book模块中加载所有的条目”。book模块包含你阅读本章时所需的所有数据。在输出欢迎信息之后,将会加载一些书的文本(这将需要几秒钟)。下面就是你需要输入的命令及输出的结果,注意拼写和标点符号的正确性,记住不要输入>>>。>>> from nltk.book import **** Introductory Examples for the NLTK Book ***Loading text1, ..., text9 and sent1, ..., sent9Type the name of the text or sentence to view it.Type: 'texts()' or 'sents()' to list the materials.text1: Moby Dick by Herman Melville 1851text2: Sense and Sensibility by Jane Austen 1811text3: The Book of Genesistext4: Inaugural Address Corpustext5: Chat Corpustext6: Monty Python and the Holy Grailtext7: Wall Street Journaltext8: Personals Corpustext9: The Man Who Was Thursday by G . K . Chesterton 1908>>>

无论什么时候想要找到这些文本,只需要在Python提示符后输入它们的名字即可。>>> text1>>> text2>>>

现在我们可以使用Python解释器和这些数据,准备开始了。搜索文本

除了简单地阅读文本之外,还有很多方法可以用来查看文本内容。词语索引视图可以显示指定单词的出现情况,同时还可以显示一些上下文。下面我们输入text1并在后面跟一个点,再输入函数名concordance,然后将monstrous放在括号里,用来查找《白鲸记》中的词monstrous。>>> text1.concordance("monstrous")Building index...Displaying 11 of 11 matches:ong the former , one was of a most monstrous size . ...This came towards us ,ON OF THE PSALMS . " Touching that monstrous bulk of the whale or ork we have rll over with a heathenish array of monstrous clubs and spears . Some were thickd as you gazed , and wondered what monstrous cannibal and savage could ever havthat has survived the flood ; most monstrous and most mountainous ! That Himmthey might scout at Moby Dick as a monstrous fable , or still worse and more deh of Radney .'" CHAPTER 55 Of the monstrous Pictures of Whales . I shall ere ling Scenes . In connexion with the monstrous pictures of whales , I am stronglyere to enter upon those still more monstrous stories of them which are to be foght have been rummaged out of this monstrous cabinet there is no telling . Butof Whale - Bones ; for Whales of a monstrous size are oftentimes cast up dead u>>>轮到你来

尝试搜索其他词。为了方便重复输入,你也许会用到上箭头、Ctrl-↑或者Alt-p以获取之前输入的命令,然后修改要搜索的词。你也可以尝试搜索已经列入的其他文本。例如:使用text2.concordance("affection")搜索《理智与情感》中的词affection;使用text3.concordance("lived")搜索《创世纪》找出某人活了多久;你也可以看看text4,《就职演说语料》,回到1789年去看看那时英语使用的例子,并且搜索如nation, terror, god这样的词,看看随着时间的推移这些词的使用有何不同;同样还有text5,《NPS聊天语料库》,你可以在里面搜索一些网络用语,如im, ur, lol。(注意这个语料库是未经审查的!)

通过一段时间对这些文本的研究,我们希望你能对语言的丰富性和多样性有一个新的认识。在下一章中,你将学习如何获取更广泛的文本,包括英语以外其他语言的文本。

关键词索引让我们可以看到上下文中的词。例如:我们看到monstrous出现在文章中,如the___pictures和the____ size。还有哪些词出现在相似的上下文中?我们可以通过在被查询的文本名后添加函数名similar,然后在括号中插入相关词的方法来查找到。>>> text1.similar("monstrous")Building word-context index...subtly impalpable pitiable curious imperial perilous trustworthyabundant untoward singular lamentable few maddens horrible loving lazymystifying christian exasperate puzzled>>> text2.similar("monstrous")Building word-context index...very exceedingly so heartily a great good amazingly as sweetremarkably extremely vast>>>

可以发现从不同的文本中能够得到不同的结果。Austen(奥斯丁,英国女小说家)在词汇的使用上与Melville完全不同。对于她来说,monstrous是正面的意思,有时它的功能像词very一样用作强调成分。

我们可以使用函数common_contexts研究共用两个或两个以上词汇的上下文,如monstrous和very。使用方括号和圆括号将这些词括起来,中间用逗号分割。>>> text2.common_contexts(["monstrous", "very"])be_glad am_glad a_pretty is_pretty a_lucky>>>>轮到你来:

挑选另一对词,使用similar()和common_contexts()函数比较它们在两个不同文本中的用法。

自动检测出现在文本中的特定的词,并显示同一上下文中出现的其他词。我们也可以判断词在文本中的位置:从文本开头算起有多少词出现。这个位置信息可以用离散图表示。每一列代表一个单词,每一行代表整个文本。在图1-2中,我们看到在过去220年中的一些显著的词语用法模式(在一个由就职演说语料首尾相连组合的人工文本中)。可以利用下面的方法画出离散图。你也许会想尝试更多的单词(如:liberty,constitution)和不同的文本。你能在看到这幅图之前预测一个单词的分布吗?如前所述,保证引号、逗号、中括号及小括号的使用完全正确。>>> text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"])>>>图1-2 美国总统就职演说词汇分布图:可以用来研究随时间推移语言使用上的变化重要事项:

为了画出本书中用到的图形,你需要安装Python的NumPy和Matplotlib程序包。请参阅http://www.nltk.org/上的安装说明。

现在轻松一下,尝试以上述不同风格产生一些随机文本。要做到这一点,我们需要输入后面跟着函数名generate的文本名称。(需要带括号,但括号里什么也没有。)>>> text3.generate()In the beginning of his brother is a hairy man , whose top may reachunto heaven ; and ye shall sow the land of Egypt there was no bread inall that he was taken out of the month , upon the earth . So shall thywages be ? And they made their father ; and Isaac was old , and kissedhim : and Laban with his cattle in the midst of the hands of Esau thyfirst born , and Phichol the chief butler unto his son Isaac , she>>>

请注意,第一次运行此命令时,由于要搜集单词序列的统计信息,因而执行速度比较慢。每次运行后,输出的文本都会不同。现在尝试产生就职演说风格或互联网聊天室风格的随机文本。虽然文本是随机的,但它重复使用了源文本中常见的单词和短语,从而使我们能感觉到它的风格和内容。

在generate产生输出时,标点符号与前面的单词分开。虽然这不是正确的英文格式,但我们之所以这么做是为了确保文字和标点符号是彼此独立的。更多关于这方面的内容将在第3章学习。计数词汇

在前面例子中出现的文本中,最明显的地方在于它们所使用的词汇不同。在本节中,我们将看到如何使用计算机并以各种有用的方式来计数词汇。像以前一样,你可以马上开始使用Python解释器进行试验,即使你可能还没有系统地研究过Python。修改这些例子并测试一下你对它们的理解程度,尝试一下本章结尾的练习题。

首先,让以文本中出现的单词和标点符号为单位算出文本从头到尾的长度。使用函数len获取长度,参考《创世纪》中使用的例子。>>> len(text3)44764>>>《创世纪》有44764个单词和标点符号,也被称作“标识符”。标识符是表示一组字符序列——如:hairy、his或者:)——的术语。当计算文本中标识符的个数时,如to be or not to be这句话,我们计算的是这些序列出现的次数。因此,例句中出现了to和be各两次,or和not各一次。然而在例句中只有4个不同的单词。《创世纪》中有多少不同的单词?如果要用Python来回答这个问题,就不得不稍微改变一下提出的问题。因为一个文本词汇表只是它用到的标识符的集合,在集合中所有重复的元素都只算一个。在Python中可以使用命令:set(text3)来获得text3的词汇表。这样做之后,屏幕上的很多词就会被掠过。现在尝试以下操作。>>> sorted(set(text3)) ①['!', "'", '(', ')', ',', ',)', '.', '.)', ':', ';', ';)', '?', '?)','A', 'Abel', 'Abelmizraim', 'Abidah', 'Abide', 'Abimael', 'Abimelech','Abr', 'Abrah', 'Abraham', 'Abram', 'Accad', 'Achbor', 'Adah', ...]>>> len(set(text3)) ②2789>>>①

用sorted()包裹Python表达式set(text3),得到一个词汇条目的排序表,这个表以各种标点符号开始,然后接着是以A开头的词汇。大写单词排在小写单词前面。通过求集合中项目的个数,可以间接地获②得词汇表的大小。再次使用命令len来获得这个数值。尽管书中有44764个标识符,但只有2789个不同的词汇或“词类型”。词类型是指一个词在一个文本中独一无二的出现或拼写形式。也就是说,这个单词在词汇表中是唯一的。计数的2789个项目中包括标点符号,所以把它们称作唯一项目类型而不是词类型。

现在,开始对文本词汇丰富度进行测量。下面的例子展示的结果含义为每个词平均被使用了16次(应该确保Python使用的是浮点除法)。>>> from __future__ import division>>> len(text3) / len(set(text3))16.05 0197203298673>>>

接下来,专注于特定的词。计数一个单词在文本中出现的次数,再计算一个特定词在文本中占据的百分比。>>> text3.count("smote")5>>> 100 * text4.count('a') / len(text4)1.46 43016433938312>>>轮到你来:

text5中lol出现了多少次?它占文本全部词数的百分比是多少?

也许你想要对几个文本重复进行这些计算,但重新输入公式是很乏味的。方法是可以自己命名一个任务,如“lexical_diversity”或“percentage”,然后用一个代码块关联它。这样,你只需输入一个很短的名字就可以代替一行或多行Python代码,而且想用多少次就用多少次。执行一个任务的代码段叫做函数。使用关键字def给函数定义一个简短的名字。下面的例子演示的是如何定义两个新的函数,lexical_diversity()和percentage()。>>> def lexical_diversity(text): ①...   return len(text) / len(set(text)) ②...>>> def percentage(count, total): ③...   return 100 * count / total...注意!

当遇到第一行末尾的冒号时,Python解释器提示符由>>>变为...。...提示符表示Python期望的是在后面出现一个缩进代码块。缩进由你决定只需输入4个空格或是敲击Tab键。要结束一个缩进代码段,只需输入一个空行。①

在lexical_diversity()的定义中,指定了一个text参数。这个参数是计算文本词汇多样性时的一个“占位符”,并在使用函数时,重现②③在运行的代码段中。类似地,percentage()定义了两个参数:count和total。

只要Python知道了lexical_diversity()和percentage()是指定代码段的名字,我们就可以继续使用这些函数了。>>> lexical_diversity(text3)16.05 0197203298673>>> lexical_diversity(text5)7.42 00461589185629>>> percentage(4, 5)80.0>>> percentage(text4.count('a'), len(text4))1.46 43016433938312>>>

简要重述一下,使用或者说是调用一个如lexical_diversity()这样的函数时,只要输入它的名字并在后面跟一个左括号,再输入文本名字,然后是右括号即可。这些括号经常出现,它们的作用是将任务名——如:lexical_diversity()——与任务将要处理的数据——如:text3分割开。调用函数时放在参数位置的数据值叫做函数的实参。

在本章中,你已经遇到了一些函数,如:len(),set()和sorted()。通常会在函数名后面加一对空括号,例如len(),这只是为了表明这是一个函数而不是其他的Python表达式。函数是编程中的一个重要概念,我们只是在一开始提到了它们,为了是让新手体会到编

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载