当前位置: 首页 > 新闻 > 信息荟萃
编号:5227
Python自然语言处理实战.pdf
http://www.100md.com 2020年11月5日
第1页
第7页
第12页
第26页
第48页
第181页

    参见附件(4555KB,382页)。

     《Python自然语言处理》中,你将学会编写Python程序处理大量非结构化文本。你还将通过使用综合语言数据结构访问含有丰富注释的数据集,理解用于分析书面通信内容和结构的主要算法。

    编辑推荐

    Python自然语言处理方面的之作 快速了解一些概念及基本工作原理的 提供丰富英文语料库和代码,方便练习 从输入法联想提示(predictive text)、e过滤到自动文本汇总、机器翻译,大量的语言相关的技术都离不开自然语言处理的支持,而这本书提供了自然语言处理的入门指南。通过本书,你将学到如何编写能处理大量非结构化文本的Python程序。你可以访问具有丰富标注的、涵盖了语言学各种数据结构的数据集,而且你将学习分析书面文档的内容以及结构的主要算法。 通过大量的例子和练习,本书将帮助你: 从非结构化文本中提取信息,无论是猜测主题还是识别“命名实体”; 分析文本的语言学结构,包括语法和语义分析; 访问流行的语言学数据集,包括WordNet和treebanks; 整合从语言学到人工智能等多个领域的技术。 通过使用Python程序设计语言和自然语言工具包(NTLK)的开源库,本书将帮助你增加自然语言处理的实际经验。如果你对开发Web应用、分析多语言的新闻源或编制濒危语言感兴趣,或者只是想要从程序员的视角看人类语言如何运作,你将发现本书不趣而且极其有用。

    内容提要

    自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能够实现人与计算机之间用自然语言进行有效通信的各种理论和方法,涉及所有用计算机对自然语言进行的操作。 《Python自然语言处理》是自然语言处理领域的一本实用入门指南,旨在帮助读者学习如何编写程序来分析书面语言。《Python自然语言处理》基于Python编程语言以及一个名为NLTK的自然语言工具包的开源库,但并不要求读者有Python编程的经验。全书共11章,按照难易程度顺序编排。章到第3章介绍了语言处理的基础,讲述如何使用小的Python程序分析感兴趣的文本信息。第4章讨论结构化程序设计,以巩固前面几章中介绍的编程要点。第5章到第7章介绍语言处理的基本原理,包括标注、分类和信息提取等。第8章到0章介绍了句子解析、句法结构识别和句意表达方法。1章介绍了如何有效管理语言数据。后记部分简要讨论了NLP领域的过去和未来。 《Python自然语言处理》的实践性很强,包括上百个实际可用的例子和分级练习。《Python自然语言处理》可供读者用于自学,也可以作为自然语言处理或计算语言学课程的教科书,还可以作为人工智能、文本挖掘、语料库语言学等课程的补充读物。

    前言

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

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

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

    本书基于Python编程语言及其上的一个名为自然语言工具包(Natural Language Toolk it,简称NLTK)的开源库。NLTK包含大量的软件、数据和文档,所有这些都可以从http/

    /www.nlik.org/。NLTK的发行版本支持Windows,Macintosh和Unix平台。我们强烈建议你Python和NLTk,与我们一起尝试书中的例子和练习。

    Python自然语言处理实战截图

    2

    PYTHON PYTHON PYTHON PYTHON 自然语言处理中文 翻译

    作者: Steven Bird, Ewan Klein Edward Loper

    英文版出版社: O'REILLY

    翻译:陈涛( weibo.comchentao1999 )

    译者的话 译者的话 译者的话 译者的话

    作为一个自然语言处理的初学者,看书看到 “ 训练模型 ” ,这模型那模型的,一直不知

    道模型究竟是什么东西 。 看了这本书 , 从预处理数据到提取特征集 , 训练模型 , 测试修改等 ,一步一步实际操作了之后 , 才对模型一词有了直观的认识 ( 算法的中间结果 , 存储在计算机

    中的一个个 pkl 文件 ,测试的时候直接用,前面计算过的就省了 ) 。以后听人谈 “ 模型 ” 的

    时候也有了底气。当然,模型还有很多其他含义。还有动词的 “ 配价 ” 、各种搭配、客观逻

    辑对根据文法生成的句子的约束如何实现?不上机动手做做,很难真正领悟。

    自然语言处理理论书籍很多 , 讲实际操作的不多 , 能讲的这么系统的更少 。 从这个角度

    讲 , 本书是目前世界上最好的自然语言处理实践教程 。 初学者若在看过理论之后能精读本书 ,必定会有获益。这也是翻译本书的目的之一。

    本书是译者课余英文翻译练习,抛砖引玉。书中存在很多问题,尤其是第 10 章命题逻

    辑和一阶逻辑推理在自然语言处理中的应用 。 希望大家多多指教 。 可以在微博上找到我 ( w

    eibo.comchentao1999 ) 。虽然读中文翻译速度更快,但直接读原文更能了解作者的本意。

    原书作者在书的最后列出了迫切需要帮助改进的条目 , 对翻译本书建议使用目标语言的

    例子 , 目前本书还只能照搬英文的例子 , 希望有志愿者能加入本书的中文化进程中 , 为中文

    自然语言处理做出贡献。

    将本书作学习和研究之用,欢迎传播、复制、修改。山寨产品请留下译者姓名和微博 。

    用于商业目的,请与原书版权所有者联系,译者不承担由此产生的责任。

    译者

    2012 年 4 月 7 日3

    PYTHON 自然语言处理

    从输入法联想提示 ( p re

    dictive text ) 、 email 过滤到自

    动文本摘要、机器翻译,大

    量的语言相关 的 技术都离不

    开自然语言处理的支持 , 而这本书提供了自

    然语言处理非常方便的入门 指南 。通过它 ,你将学到如何写能处理大量非结构化文本

    的 Python 程序 。 你将获得 有丰富 标注 的 涵

    盖语言学各种数据结构的数据集 , 而且你将

    学到 分析书面文档内容和结构的主要算法 。

    通过大量的例子和联系 , 《 PYTHON 自

    然语言处理 》将会帮助你:

    ? ? ? 从非结构化文本中提取信息 , 无论是猜

    测主题还是识别 “ 命名实体 ” 。

    ? ? ? 分析文本的语言学结构 , 包括文法和语

    义分析

    ? ? ? 访问 流行的语言学数据集,包括 Word Word Word Word

    Net Net Net Net 和 treebanks treebanks treebanks treebanks

    ? ? ? 整合从语言学到人工智能的多个领域

    的技术

    通过使用 Python 程序 设计 语言和自然

    语言工具包( NTLK )的开源函数库,本书

    将帮助你获得自然语言处理的实际经验 。 如

    果你对开发 Web 应用、分析多种语言的新

    闻来源或者收集濒危语言感兴趣 , 或者仅仅

    对以程序员的视角看人类语言如何运作好

    奇,你将发现《 PYTHON 自然语言处理 》

    不仅迷人而且极其有用。

    “ 少有的一本书 , 用如此清晰的方法如

    此优美整洁的代码处理如此复杂的问

    题 …… 这是一本从中可以学习自然语言处

    理的书 。 ”

    —— Ken Getz,MCW Technologies 高级顾问

    Steven Steven Steven Steven Bird Bird Bird Bird 是墨尔本大学计算机科学

    和软件工程系副教授 , 宾夕法尼亚大学语言

    学数据联盟高级研究助理。

    Ewan Ewan Ewan Ewan Klein Klein Klein Klein 是爱丁堡大学信息学院语

    言技术教授。

    Edward Edward Edward Edward Lope Lope Lope Lope r r r r 是宾夕法尼亚大学基于

    机器学习的自然语言处理方向的刚毕业的

    博士,现在是波士顿的 BBN Technologie s

    的研究员。4

    PYTHON 自然语言处理

    Steven Bird, Ewan Klein Edward Loper

    北京 ? 剑桥 ? 法纳姆 ? 科隆 ? 塞瓦斯托波尔 ? 台北 ? 东京

    欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍!5

    Python Py thon Python Python 自然语言处理

    by Steven Bird, Ewan Klein, and Edward Loper

    Copyright ? 2009 Steven Bird, Ewan Klein, and Edward Loper. All rights reserved.

    Printed in the United States of America.

    O Reilly Media, Inc. 出版 , 1005 Gravenstein Highway North, Sebastopol, CA 95472.

    可以购买 O Reilly 出版的书用于教育、商业或者销售推广使用。大多数图书都有网络

    版( http:my.safaribooksonline.com )。更多的信息请联系我们的企业 机构销售部门: (800)

    998-9938 or corporate@oreilly.com. 。

    编辑: Julie Steele

    制作编辑: Loranah Dimant

    拷贝编辑: Genevieve d Entremont

    校对: Loranah Dimant

    索引编者: Ellen Troutman Zaig

    封面设计: Karen Montgomery

    内页设计: David Futato

    插画: Robert Romano

    版本说明:

    2009 年六月:第一版

    Nutshell Handbook, the Nutshell Handbook 标志 , 以及 O Reilly 标志是 O Reilly Me

    dia, Inc. 的注册商标。《 PYTHON 自然语言处理》,露脊鲸图案以及相关的商品外观是 O Re

    illy Media, Inc. 的商标。

    制造商和经销商为了区分他们的产品而声明一些名称为商标。这些名称也出现在本书

    中, O Reilly Media, Inc. 知道这是商标,使用盖帽或者小的盖帽来印刷。

    在本书编写过程中已经采取一切可能的预防措施,所以出版商和作者对书中的错误和遗

    漏以及使用此书包含的信息所造成的损害不承担责任。

    ISBN: 978-0-596-51649-9

    [M]

    1244726609

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!6

    目录

    PYTHON 自然语言处理中文翻译 ...................................................................................... 2

    译者的话 ................................................................................................................... 2

    PYTHON 自然语言处理 .............................................................................................3

    目录 ................................................................................................................................. 6

    前言 ............................................................................................................................... 15

    读者 ........................................................................................................................ 15

    强调 ........................................................................................................................ 16

    你将学到什么? ....................................................................................................... 16

    篇章结构 ................................................................................................................. 16

    为什么使用 Python ? ................................................................................................17

    软件安装需求 .......................................................................................................... 18

    自然语言工具包( NLTK ) ....................................................................................... 18

    教师请看 ................................................................................................................. 19

    本书使用的约定 ....................................................................................................... 20

    使用例子代码 .......................................................................................................... 20

    Safari? 联机丛书 ...................................................................................................... 21

    如何联系我们 .......................................................................................................... 21

    致谢 ........................................................................................................................ 22

    版税 ........................................................................................................................ 22

    第 1 章 语言处理与 Python.............................................................................................. 23

    1.1 语言计算:文本和单词 ...................................................................................... 23

    Python 入门 .......................................................................................................23

    NLTK 入门 ........................................................................................................24

    搜索文本 .......................................................................................................... 26

    计数词汇 .......................................................................................................... 28

    1.2 近观 Python :将文本当做词链表 ........................................................................ 30

    链表 ................................................................................................................. 30

    索引列表 .......................................................................................................... 32

    变量 ................................................................................................................. 34

    字符串 .............................................................................................................. 35

    1.3 计算语言:简单的统计 ...................................................................................... 36

    频率分布 .......................................................................................................... 36

    细粒度的选择词 ................................................................................................ 38

    词语搭配和双连词( bigrams ) .......................................................................... 39

    计数其他东西 ................................................................................................... 39

    1.4 回到 Python: 决策与控制 ..................................................................................... 41

    条件 ................................................................................................................. 41

    对每个元素进行操作 ......................................................................................... 42

    嵌套代码块 ....................................................................................................... 43

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!7

    条件循环 .......................................................................................................... 44

    1.5 自动理解自然语言 .................................................................................................... 45

    词意消歧 .......................................................................................................... 46

    指代消解 .......................................................................................................... 46

    自动生成语言 ................................................................................................... 46

    机器翻译 .......................................................................................................... 47

    人机对话系统 ................................................................................................... 48

    文本的含义 ....................................................................................................... 49

    NLP 的局限性 ................................................................................................... 49

    1.6 小结 ......................................................................................................................... 50

    1.7 深入阅读 .................................................................................................................. 50

    1.8 练习 ......................................................................................................................... 51

    第 2 章 获得文本语料和词汇资源 ....................................................................................54

    2.1 获取文本语料库 ..................................................................................................54

    古腾堡语料库 ................................................................................................... 54

    网络和聊天文本 ................................................................................................ 56

    布朗语料库 ....................................................................................................... 57

    路透社语料库 ................................................................................................... 59

    就职演说语料库 ................................................................................................ 59

    标注文本语料库 ................................................................................................ 60

    在其他语言的语料库 ......................................................................................... 62

    文本语料库的结构 ............................................................................................ 64

    载入你自己的语料库 ......................................................................................... 65

    2.2 条件频率分布 .................................................................................................... 66

    条件和事件 ....................................................................................................... 66

    按文体计数词汇 ................................................................................................ 66

    绘制分布图和分布表 ......................................................................................... 67

    使用双连词生成随机文本 .................................................................................. 68

    2.3 更多关于 Python :代码重用 ............................................................................... 70

    使用文本编辑器创建程序 .................................................................................. 70

    函数 ................................................................................................................. 70

    模块 ................................................................................................................. 71

    2.4 词典资源 ........................................................................................................... 72

    词汇列表语料库 ................................................................................................ 73

    发音的词典 ....................................................................................................... 75

    比较词表 .......................................................................................................... 78

    2.5WordNet..............................................................................................................79

    意义与同义词 ................................................................................................... 79

    WordNet 的层次结构 ......................................................................................... 81

    更多的词汇关系 ................................................................................................ 82

    语义相似度 ....................................................................................................... 83

    2.6 小结 .................................................................................................................. 84

    2.7 深入阅读 ........................................................................................................... 85

    2.8 练习 .................................................................................................................. 85

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!8

    第 3 章 加工原料文本 ..................................................................................................... 88

    3.1 从网络和硬盘访问文本 ...................................................................................... 88

    电子书 .............................................................................................................. 88

    处理的 HTML................................................................................................... 90

    处理搜索引擎的结果 ......................................................................................... 91

    读取本地文件 ................................................................................................... 92

    从 PDF 、 MS Word 及其他二进制格式中提取文本 .............................................. 93

    捕获用户输入 ................................................................................................... 93

    NLP 的流程 ...................................................................................................... 93

    3.2 字符串:最底层的文本处理 ............................................................................... 94

    字符串的基本操作 ............................................................................................ 95

    输出字符串 ....................................................................................................... 96

    访问单个字符 ................................................................................................... 97

    访问子字符串 ................................................................................................... 98

    更多的字符串操作 ............................................................................................ 99

    链表与字符串的差异 ......................................................................................... 99

    3.3 使用 Unicode 进行文字处理 .............................................................................. 100

    什么是 Unicode ? ............................................................................................ 100

    从文件中提取已编码文本 ................................................................................ 101

    在 Python 中使用本地编码 ............................................................................... 103

    3.4 使用正则表达式检测词组搭配 .......................................................................... 104

    使用基本的元字符 ...........................................................................................104

    范围与闭包 ..................................................................................................... 105

    3.5 正则表达式的有益应用 .....................................................................................107

    提取字符块 ..................................................................................................... 107

    在字符块上做更多事情 ....................................................................................108

    查找词干 .........................................................................................................109

    搜索已分词文本 .............................................................................................. 110

    3.6 规范化文本 ...................................................................................................... 111

    词干提取器 ..................................................................................................... 112

    词形归并 .........................................................................................................113

    3.7 用正则表达式为文本分词 ................................................................................. 113

    分词的简单方法 .............................................................................................. 114

    NLTK 的正则表达式分词器 ............................................................................. 115

    分词的进一步问题 ...........................................................................................116

    3.8 分割 .................................................................................................................116

    断句 ................................................................................................................116

    分词 ................................................................................................................117

    3.9 格式化:从链表到字符串 ................................................................................. 120

    从链表到字符串 .............................................................................................. 120

    字符串与格式 ..................................................................................................120

    排列 ................................................................................................................122

    将结果写入文件 .............................................................................................. 123

    文本换行 .........................................................................................................124

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!9

    3.10 小结 ............................................................................................................... 124

    3.11 深入阅读 ........................................................................................................ 125

    3.12 练习 ............................................................................................................... 126

    第 4 章 编写结构化程序 ................................................................................................ 131

    4.1 回到基础 ..........................................................................................................131

    赋值 ................................................................................................................131

    等式 ................................................................................................................133

    条件语句 .........................................................................................................133

    4.2 序列 .................................................................................................................134

    序列类型上的操作 ...........................................................................................135

    合并不同类型的序列 ....................................................................................... 136

    产生器表达式 ..................................................................................................138

    4.3 风格的问题 ...................................................................................................... 138

    Python 代码风格 .............................................................................................. 138

    过程风格与声明风格 ....................................................................................... 139

    计数器的一些合理用途 ....................................................................................141

    4.4 函数:结构化编程的基础 ................................................................................. 142

    函数的输入和输出 ...........................................................................................142

    参数传递 .........................................................................................................143

    变量的作用域 ..................................................................................................144

    参数类型检查 ..................................................................................................145

    功能分解 .........................................................................................................145

    文档说明函数 ..................................................................................................147

    4.5 更多关于函数 ...................................................................................................148

    作为参数的函数 .............................................................................................. 148

    累计函数 .........................................................................................................149

    高阶函数 .........................................................................................................150

    参数的命名 ..................................................................................................... 150

    4.6 程序开发 ..........................................................................................................152

    Python 模块的结构 .......................................................................................... 152

    多模块程序 ..................................................................................................... 153

    误差源头 .........................................................................................................154

    调试技术 .........................................................................................................155

    防御性编程 ..................................................................................................... 156

    4.7 算法设计 ..........................................................................................................157

    递归 ................................................................................................................157

    权衡空间与时间 .............................................................................................. 159

    动态规划 .........................................................................................................161

    4.8 Python 库的样例 ................................................................................................163

    Matplotlib 绘图工具 ......................................................................................... 163

    NetworkX........................................................................................................ 165

    CSV................................................................................................................ 166

    NumPy............................................................................................................ 166

    其他 Python 库 .................................................................................................167

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!10

    4.9 小结 .................................................................................................................167

    4.10 深入阅读 ........................................................................................................ 168

    4.11 练习 ............................................................................................................... 168

    第 5 章 分类和标注词汇 ................................................................................................ 172

    5.1 使用词性标注器 ............................................................................................... 172

    5.2 标注语料库 ...................................................................................................... 173

    表示已标注的标识符 ....................................................................................... 173

    读取已标注的语料库 ....................................................................................... 174

    简化的词性标记集 ...........................................................................................175

    名词 ................................................................................................................176

    动词 ................................................................................................................177

    形容词和副词 ..................................................................................................178

    未简化的标记 ..................................................................................................178

    探索已标注的语料库 ....................................................................................... 179

    5.3 使用 Python 字典映射词及其属性 ..................................................................... 181

    索引链表 VS 字典 ........................................................................................... 181

    Python 字典 ..................................................................................................... 182

    定义字典 .........................................................................................................184

    默认字典 .........................................................................................................184

    递增地更新字典 .............................................................................................. 185

    复杂的键和值 ..................................................................................................187

    颠倒字典 .........................................................................................................187

    5.4 自动标注 ..........................................................................................................188

    默认标注器 ..................................................................................................... 189

    正则表达式标注器 ...........................................................................................189

    查询标注器 ..................................................................................................... 190

    评估 ................................................................................................................192

    5.5 N-gram 标注 ......................................................................................................192

    一元标注( Unigram Tagging ) ......................................................................... 192

    分离训练和测试数据 ....................................................................................... 193

    一般的 N-gram 的标注 ..................................................................................... 193

    组合标注器 ..................................................................................................... 194

    标注生词 .........................................................................................................195

    存储标注器 ..................................................................................................... 195

    性能限制 .........................................................................................................196

    跨句子边界标注 .............................................................................................. 197

    5.6 基于转换的标注 ............................................................................................... 197

    5.7 如何确定一个词的分类 .....................................................................................199

    形态学线索 ..................................................................................................... 199

    句法线索 .........................................................................................................199

    语义线索 .........................................................................................................200

    新词 ................................................................................................................200

    词性标记集中的形态学 ....................................................................................200

    5.8 小结 .................................................................................................................201

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!11

    5.9 深入阅读 ..........................................................................................................201

    5.10 练习 ............................................................................................................... 202

    第六章 学习分类文本 ................................................................................................... 206

    6.1 有监督分类 ...................................................................................................... 206

    性别鉴定 .........................................................................................................207

    选择正确的特征 .............................................................................................. 208

    文档分类 .........................................................................................................211

    探索上下文语境 .............................................................................................. 213

    序列分类 .........................................................................................................214

    其他序列分类方法 ...........................................................................................216

    6.2 有监督分类的更多例子 .....................................................................................216

    句子分割 .........................................................................................................216

    识别对话行为类型 ...........................................................................................217

    识别文字蕴含 ..................................................................................................218

    扩展到大型数据集 ...........................................................................................219

    6.3 评估 .................................................................................................................219

    测试集 ............................................................................................................ 220

    准确度 ............................................................................................................ 220

    精确度和召回率 .............................................................................................. 221

    混淆矩阵 .........................................................................................................222

    交叉验证 .........................................................................................................222

    6.4 决策树 ............................................................................................................. 223

    熵和信息增益 ..................................................................................................224

    6.5 朴素贝叶斯分类器 ............................................................................................225

    潜在概率模型 ..................................................................................................227

    零计数和平滑 ..................................................................................................227

    非二元特征 ..................................................................................................... 228

    独立的朴素 ..................................................................................................... 228

    双重计数的原因 .............................................................................................. 228

    6.6 最大熵分类器 ...................................................................................................229

    最大熵模型 ..................................................................................................... 229

    熵的最大化 ..................................................................................................... 230

    生成式分类器对比条件式分类器 ......................................................................231

    6.7 为语言模式建模 ............................................................................................... 231

    模型告诉我们什么? ....................................................................................... 232

    6.8 小结 .................................................................................................................232

    6.9 进一步阅读 ...................................................................................................... 232

    6.10 练习 ............................................................................................................... 233

    第七章 从文本提取信息 ................................................................................................ 235

    7.1 信息提取 ..........................................................................................................235

    信息提取结构 ..................................................................................................236

    7.2 分块 .................................................................................................................237

    名词短语分块 ..................................................................................................237

    标记模式 .........................................................................................................238

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!12

    用正则表达式分块 ...........................................................................................239

    探索文本语料库 .............................................................................................. 239

    加缝隙 ............................................................................................................ 240

    块的表示:标记与树 ....................................................................................... 241

    7.3 开发和评估分块器 ............................................................................................242

    读取 IOB 格式与 CoNLL2000 分块语料库 ........................................................ 242

    简单评估和基准 .............................................................................................. 243

    训练基于分类器的分块器 ................................................................................ 245

    7.4 语言结构中的递归 ............................................................................................249

    用级联分块器构建嵌套结构 .............................................................................249

    树 ................................................................................................................... 250

    树遍历 ............................................................................................................ 251

    7.5 命名实体识别 ...................................................................................................252

    7.6 关系抽取 ..........................................................................................................254

    7.7 小结 .................................................................................................................255

    7.8 进一步阅读 ...................................................................................................... 256

    7.9 练习 .................................................................................................................256

    第 8 章 分析句子结构 ................................................................................................... 259

    8.1 一些语法困境 ...................................................................................................259

    语言数据和无限可能性 ....................................................................................259

    普遍存在的歧义 .............................................................................................. 260

    8.2 文法有什么用? ............................................................................................... 262

    超越 n-grams................................................................................................... 262

    8.3 上下文无关文法 ............................................................................................... 264

    一种简单的文法 .............................................................................................. 264

    写你自己的文法 .............................................................................................. 266

    句法结构中的递归 ...........................................................................................267

    8.4 上下文无关文法分析 ................................................................................. 268

    递归下降分析 ..................................................................................................268

    移进 - 归约分析 .................................................................................................270

    左角落分析器 ..................................................................................................271

    符合语句规则的子串表 ....................................................................................271

    8.5 依存关系和依存文法 ........................................................................................ 274

    配价与词汇 ..................................................................................................... 276

    扩大规模 .........................................................................................................277

    8.6 文法开发 ..........................................................................................................278

    树库和文法 ..................................................................................................... 278

    有害的歧义 ..................................................................................................... 279

    加权文法 .........................................................................................................281

    8.7 小结 .................................................................................................................283

    8.8 进一步阅读 ...................................................................................................... 283

    8.9 练习 .................................................................................................................284

    第 9 章 建立基于特征的文法 ......................................................................................... 287

    9.1 文法特征 ..........................................................................................................287

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!13

    句法协议 .........................................................................................................288

    使用属性和约束 .............................................................................................. 290

    术语 ................................................................................................................293

    9.2 处理特征结构 ...................................................................................................295

    包含和统一 ..................................................................................................... 297

    9.3 扩展基于特征的文法 ........................................................................................ 300

    子类别 ............................................................................................................ 300

    核心词回顾 ..................................................................................................... 302

    助动词与倒装 ..................................................................................................303

    无限制依赖成分 .............................................................................................. 304

    德语中的格和性别 ...........................................................................................307

    9.4 小结 .................................................................................................................310

    9.5 进一步阅读 ...................................................................................................... 310

    9.6 练习 .................................................................................................................311

    第 10 章 分析句子的意思 .............................................................................................. 314

    10.1 自然语言理解 ................................................................................................. 314

    查询数据库 ..................................................................................................... 314

    自然语言、语义和逻辑 ....................................................................................317

    10.2 命题逻辑 ........................................................................................................ 319

    10.3 一阶逻辑 ........................................................................................................ 321

    句法 ................................................................................................................322

    一阶定理证明 ..................................................................................................324

    一阶逻辑语言总结 ...........................................................................................325

    真值模型 .........................................................................................................325

    独立变量和赋值 .............................................................................................. 327

    量化 ................................................................................................................328

    量词范围歧义 ..................................................................................................329

    模型的建立 ..................................................................................................... 330

    10.4 英语句子的语义 ............................................................................................. 332

    基于特征的文法中的合成语义学 ......................................................................332

    λ演算 ............................................................................................................ 333

    量化的 NP....................................................................................................... 335

    及物动词 .........................................................................................................336

    再述量词歧义 ..................................................................................................338

    10.5 段落语义层 .................................................................................................... 341

    段落表示理论 ..................................................................................................341

    段落处理 .........................................................................................................343

    10.6 小结 ............................................................................................................... 345

    10.7 进一步阅读 .................................................................................................... 345

    10.8 练习 ............................................................................................................... 346

    第 11 章 语言数据管理 .................................................................................................. 349

    11.1 语料库结构:一个案例研究 ............................................................................ 349

    TIMIT 的结构 ..................................................................................................349

    主要设计特点 ..................................................................................................351

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!14

    基本数据类型 ..................................................................................................352

    11.2 语料库生命周期 ............................................................................................. 353

    语料库创建的三种方案 ....................................................................................353

    质量控制 .........................................................................................................353

    维护与演变 ..................................................................................................... 354

    11.3 数据采集 ........................................................................................................ 355

    从网上获取数据 .............................................................................................. 355

    从字处理器文件获取数据 ................................................................................ 356

    从电子表格和数据库中获取数据 ......................................................................357

    转换数据格式 ..................................................................................................358

    决定要包含的标注层 ....................................................................................... 359

    标准和工具 ..................................................................................................... 359

    处理濒危语言时特别注意事项 ......................................................................... 360

    11.4 使用 XML...................................................................................................... 362

    语言结构中使用 XML......................................................................................362

    XML 的作用 ....................................................................................................363

    ElementTree 接口 ............................................................................................. 364

    使用 ElementTree 访问 Toolbox 数据 .................................................................366

    格式化条目 ..................................................................................................... 368

    11.5 使用 Toolbox 数据 ...........................................................................................368

    为每个条目添加一个字段 ................................................................................ 368

    验证 Toolbox 词汇 ........................................................................................... 369

    11.6 使用 OLAC 元数据描述语言资源 .................................................................... 372

    元数据是什么? .............................................................................................. 372

    OLAC :开放语言档案社区 ..............................................................................372

    11.7 小结 ............................................................................................................... 373

    11.8 进一步阅读 .................................................................................................... 374

    11.9 练习 ............................................................................................................... 374

    后记:语言的挑战 .........................................................................................................376

    语言处理与符号处理 ....................................................................................... 376

    当代哲学划分 ..................................................................................................377

    NLTK 的路线图 ...............................................................................................378

    Envoi .............................................................................................................. 379

    参考文献 .......................................................................................................................380

    NLTK 索引 ....................................................................................................................380

    一般索引 .......................................................................................................................380

    关于作者 .......................................................................................................................381

    书的末页 .......................................................................................................................382

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!前言

    这是一本关于自然语言处理的书。所谓“自然语言”,是指人们日常交流使用的语言 ,如英语,印地语,葡萄牙语等。相对于编程语言和数学符号这样的人工语言,自然语言随着

    一代人传给另一代人而不断演化,因而很难用明确的规则来刻画。从广义上讲,“自然语言

    处理”( Natural Language Processing 简称 NLP )包含所有用计算机对自然语言进行的操作 ,从最简单的通过计数词出现的频率来比较不同的写作风格,到最复杂的完全“理解”人所说

    的话,至少要能达到对人的话语作出有效反应的程度。

    基于 NLP 的技术应用日益广泛。例如:手机和手持电脑支持输入法联想提示和手写识

    别;网络搜索引擎能搜到非结构化文本中的信息;机器翻译能把中文文本翻译成西班牙文 。

    通过提供更自然的人机界面和更复杂的存储信息获取手段,语言处理正在这个多语种的信息

    社会中扮演更核心的角色。

    这本书提供自然语言处理领域非常方便的入门指南。它可以用来自学,也可以作为自然

    语言处理或计算语言学课程的教科书,或是人工智能、文本挖掘、语料库语言学课程的补充

    读物。本书的实践性很强,包括几百个实际可用的例子和分级练习。

    本书基于 Python 编程语言及其上的一个名为自然语言工具包( Natural Language Toolk

    it ,简称 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 的例子而钻研第一章一开始就有的有趣的语言分析材料。你能很快

    在这个迷人的领域展现你的技能。

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!16

    强调强调强调强调

    本书是一本 实用 的介绍 NLP 的书。你将通过例子来学习,编写真正的程序,体会到能

    够通过实践验证自己想法的价值。如果你没有学过编程,本书将教你如何 编程 。与其他编程

    书籍不同的是,我们提供了丰富的来自 NLP 领域的实例和练习。我们撰写本书的方法也是

    讲究 原则和条理 的,无论是严谨的语言学还是计算分析学,我们不回避所涉及到的基础理论 。

    我们曾经试图在理论与实践之间寻求 折中 ,确定它们之间的联系与边界。最终我们认识到只

    要能从中受益而感到 快乐 这些都是无关紧要的,所以我们竭尽所能插入了很多既有益又有趣

    的应用和例子,有些甚至有些异想天开。

    请注意本书并不是一本工具书。本书讲述的 Python 和 NLP 是精心挑选的,并通过教程

    的形式展现的。关于参考材料,请查阅 http:python.org 和 http:www.nltk.org ,那里有大量

    可搜索的资源。

    本书也不是高深的计算机科学文章。书中的内容属于初级和中级,目标读者是那些想要

    学习如何使用 Python 和自然语言分析包来分析文本的人。

    你将学到什么? 你将学到 什么? 你将学到什么? 你将学到什么?

    通过钻研本书,你将学到:

    十分简单的程序如何就能帮你处理和分析语言数据,以及如何写这些程序

    NLP 与语言学的关键概念是如何用来描述和分析语言的

    NLP 中的数据结构和算法是怎样的

    语言数据是如何存储为标准格式,以及如何使用数据来评估 NLP 技术的性能

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

    情见表 P-1 :

    表 P-1. 读者的目标和背景不同,阅读本书可获得的技能和知识

    目标 艺术人文背景 理工背景

    语言分析 操控大型语料库,设计语言模型,验

    证由经验得出的假设。

    使用数据建模,数据挖掘和知识发现的

    技术来分析自然语言。

    语言技术 应用 NLP 技术构筑健壮的系统处理

    语言学任务。

    使用健壮的语言处理软件中的语言学

    算法和数据结构

    篇章结构 篇章结构 篇章 结构 篇章结构

    本书前几章按照概念的难易程度编排。先是实用性很强的语言处理的入门介绍,讲述如

    何使用很短的 Python 程序分析感兴趣的文本信息( 1-3 章)。接着是结构化程序设计章节(第

    4 章),用来巩固散布在前面几章中的编程要点。之后,速度加快,我们用一系列章节讲述

    语言处理的主要内容:标注、分类和信息提取( 5-7 章)。接下来的三章探索分析句子、识

    别句法结构和构建表示句意的方法( 8-10 章)。最后一章讲述如何有效管理语言数据(第 1

    1 章)。本书结尾处的后记简要讨论了 NLP 的过去和未来。

    每一章中我们都在两种不同的叙述风格间切换。一种风格是以自然语言为主线。我们分

    析语言,探索语言学概;在讨论中使用编程的例子。我们经常会使用尚未系统介绍的 Pytho

    n 结构,这样你可以在钻研这些程序如何运作的细节之前了解它们的效能。就像学习一门外

    语的惯用表达一样,你能够买到好吃的糕点而不必先学会复杂的提问句型。叙述的另一种风

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!17

    格是以程序设计语言为主线。我们将分析程序、探索算法,而语言学例子将扮演配角。

    每章结尾都有一系列分级练习,用于巩固学到的知识。练习按照如下的标准分级:○初

    级练习:对范例代码作稍微修改等简单的练习; ? 中级练习:深入探索材料的一个方面,需

    要仔细的分析和设计;●高级练习:开放的任务,挑战你对材料的理解并迫使你独立思考解

    决的方案(新学编程的读者应该跳过这些)。

    每一章都有深入阅读环节和放在 http:www.nltk.org 网上的一个“额外”环节,用来介

    绍更深入的材料和一些网络资源。所有实例代码都可从网上下载。

    为什么使用 为什么使 用 为什么使用 为什么使用 Python Py thon Python Python ? ? ? ?

    Python 是一种简单但功能强大的编程语言,非常适合处理语言数据。 Python 可以从 htt

    p: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.splie 。第三,方法的参数写在括号内。例如:

    上面的例子中的 word.endswith('ing') ,参数“ ing ”表示我们需要找的是“ ing ”结尾的词而不

    是别的结尾的词。最后也是最重要的, Python 的可读性如此之强以至于可以相当容易的猜

    出程序的功能,即使你以前从未写过一行代码。

    我们选择 Python 是因为它的学习曲线比较平缓,文法和语义都很清晰,具有良好的处

    理字符串的功能。作为解释性语言, Python 便于交互式编程。作为面向对象语言, Python

    允许数据和方法被方便的封装和重用。作为动态语言, Python 允许属性等到程序运行时才

    被添加到对象,允许变量自动类型转换,提高开发效率。 Python 自带强大的标准库,包括

    图形编程、数值处理和网络连接等组件。

    Python 在世界各地的工业、科研、教育领域应用广泛。它因为提高了软件的生产效率 、质量和可维护性而备受称赞。 http:www.python.orgaboutsuccess 中列举了许多成功使用 Pyt

    hon 的故事。

    NLTK 定义了一个使用 Python 进行 NLP 编程的基础工具。它提供重新表示自然语言处

    理相关数据的基本类,词性标注、文法分析、文本分类等任务的标准接口以及这些任务的标

    准实现,可以组合起来解决复杂的问题。

    NLTK 自带大量文档。作为本书的补充, http:www.nltk.org 网站提供的 API 文档涵盖

    工具包中每一个模块、类和函数,详细说明了各种参数,还给出了用法示例。该网站还为广

    大用户、开发人员和导师提供了很多包含大量的例子和测试用例的 HOWTO 。

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!18

    软件安装需求 软件安装 需求 软件安装需求 软件安装需求

    为了充分利用好本书,你应该安装一些免费的软件包。 http:www.nltk.org 上有这些软

    件包当前的下载链接和安装说明。

    Python

    本书的例子都假定你正在使用 Python 2.4 或 2.5 版本。一旦 NLTK 的依赖库支持 Pytho

    n3.0 ,我们将把 NLTK 移植到 Python 3.0 。

    NLTK

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

    NLTK-Data

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

    NumPy (推荐)

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

    任务中用到。

    Matplotlib (推荐)

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

    NetworkX (可选)

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

    安装 Graphviz 库。

    Prover9 (可选)

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

    自然语言工具包( 自然语言 工具包( 自然语言工具包( 自然语言工具包( NLTK NL TK NLTK NLTK ) ) ) )

    NLTK 创建于 2001 年,最初是宾州大学计算机与信息科学系计算语言学课程的一部分 。

    从那以后,在数十名贡献者的帮助下不断发展壮大。如今,它已被几十所大学的课程所采纳 ,并作为许多研究项目的基础。表 P -2 列出了 NLTK 的一些最重要的模块。

    表 P-2. 语言处理任务与相应 NLTK 模块以及功能描述

    语言处理任务 NLTK NLTK NLTK NLTK 模块 功能描述

    获取和处理语料库 nltk.corpus 语料库和词典的标准化接口

    字符串处理 nltk.tokenize, nltk.stem 分词,句子分解提取主干

    搭配发现 nltk.collocations t- 检验,卡方,点互信息 PMI

    词性标识符 nltk.tag n-gram , backoff , Brill , HMM , TnT

    分类 nltk.classify, nltk.cluster 决策树,最大熵,贝叶斯, EM , k-means

    分块 nltk.chunk 正则表达式, n-gram ,命名实体

    解析 nltk.parse 图表,基于特征,一致性,概率,依赖

    语义解释 nltk.sem, nltk.inference λ 演算,一阶逻辑,模型检验

    指标评测 nltk.metrics 精度,召回率,协议系数

    概率与估计 nltk.probability 频率分布,平滑概率分布

    应用 nltk.app, nltk.chat 图形化的关键词排序,分析器, WordNet

    查看器,聊天机器人

    语言学领域的工作 nltk.toolbox 处理 SIL 工具箱格式的数据

    NLTK 设计中的四个主要目标:

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!19

    简易性

    提供一个直观的框架和大量模块,使用户获取 NLP 知识而不必陷入像标注语言数据那

    样繁琐的事务中。

    一致性

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

    可扩展性

    提供一种结构,新的软件模块包括同一个任务中的不同的实现和相互冲突的方法都可以

    方便添加进来。

    模块化

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

    对比上述目标,我们回避了工具包的潜在实用性。首先,虽然工具包提供了广泛的工具 ,但它不是面面俱全的。它是一个工具包而不是一个系统,它将会随着 NLP 领域一起演化。

    第二,虽然这个工具包的效率足以支持实际的任务,但它运行时的性能还没有高度优化。这

    种优化往往涉及更复杂的算法或使用 C 或 C++ 等较低一级的编程语言来实现。这将影响工

    具包的可读性且更难以安装。第三,我们试图避开巧妙的编程技巧,因为我们相信清楚直白

    的实现比巧妙却可读性差的方法好。

    教师请看 教师请看 教师 请看 教师请看

    自然语言处理一般是在本科或研究生层次的高年级开设的为期一个学期的课程。很多教

    师都发现,在如此短的时间里涵盖理论和实践两个方面是十分困难的。有些课程注重理论而

    排挤实践练习,剥夺了学生编写程序自动处理语言带来的挑战和兴奋感。另一些课程仅仅教

    授语言学编程而不包含任何重要的 NLP 内容。最初开发 NLTK 就是为了解决这个问题,使

    在一个学期里同时教授大量理论和实践成为可能,无论学生事先有没有编程经验。

    算法和数据结构在所有 NLP 教学大纲中都十分重要。它们本身可能非常枯燥,而 NLT

    K 提供的交互式图形用户界面能一步一步看到算法过程,使它们变得鲜活。大多说 NLT K

    组件都有一个无需用户输入任何数据就能执行有趣的任务的示范性例子。学习本书的一个有

    效的方法就是交互式重现书中的例子,把它们输入到 Python 会话控制台,观察它们做了些

    什么,修改它们去探索试验或理论问题。

    本书包含了数百个练习,可作为学生作业的基础。最简单的练习涉及用指定的方式修改

    已有的程序片段来回答一个具体的问题。另一个极端, NLTK 为研究生水平的研究项目提供

    了一个灵活的框架,包括所有的基本数据结构和算法的标准实现,几十个广泛使用的数据集

    (语料库)的接口,以及一个灵活可扩展的体系结构。 NLTK 网站上还有其他资源支持教学

    中使用 NLTK 。

    我们相信本书是唯一为学生提供在学习编程的环境中学习 NLP 的综合性框架。各个章

    节和练习通过 NLTK 紧密耦合,并将各章材料分割开,为学生(即使是那些以前没有编程

    经验的学生)提供一个实用的 NLP 的入门指南。学完这些材料后,学生将准备好尝试一本

    更加深层次的教科书,例如:《语音和语言处理》,作者是 Jurafsky 和 Martin (Prentice Hal l

    出版社, 2008 年 ) 。

    本书介绍编程概念的顺序与众不同。以一个重要的数据类型:字符串列表(链表)开始 ,然后介绍重要的控制结构如推导和条件式等。这些概念允许我们在一开始就做一些有用的语

    言处理。有了这样做的冲动,我们回过头来系统的介绍一些基础概念,如字符串,循环,文

    件等。这样的方法同更传统的方法达到了同样的效果而不必要求读者自己已经对编程感兴

    趣。

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!20

    表 P-3 列出了两个课程计划表。第一个适用于艺术人文专业,第二个适用于理工科。其

    他的课程计划应该涵盖前 5 章,然后把剩余的时间投入单独的领域,例如:文本分类(第 6 、7 章)、文法(第 8 、 9 章)、语义(第 10 章)或者语言数据管理(第 11 章)。

    表 P-3. 课程计划建议;每一章近似的课时数

    章节 艺术人文专业 理工科

    第 1 章,语言处理与 Python 2-4 2

    第 2 章,获得文本语料和词汇资源 2-4 2

    第 3 章,处理原始文本 2-4 2

    第 4 章,编写结构化程序 2-4 1-2

    第 5 章,分类和标注单词 2-4 2-4

    第 6 章,学习本文分类 0-2 2-4

    第 7 章,从文本提取信息 2 2-4

    第 8 章,句子结构分析 2-4 2-4

    第 9 章,构建基于特征的文法 2-4 1-4

    第 10 章,分析句子的意义 1-2 1-4

    第 11 章,语言学数据管理 1-2 1-4

    总计 18-36 18-36

    本书使用的约定 本书使用的约定 本书使用的约定 本书使用的约定

    本书使用以下印刷约定:

    黑体

    表示新的术语。

    斜体

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

    等宽字体

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

    表示程序名。

    等宽斜体

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

    元变量。

    使用例 使用例 使用 例 使用例子 子 子 子代码代码代码代码

    本书是为了帮你完成你的工作的。一般情况下,你都可以在你的程序或文档中使用本书

    此图标表示警告或重要提醒。

    此图标表示提示、建议或一般性注意事项。

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!21

    中的代码。不需要得到我们获得允许,除非你要大量的复制代码。例如,写程序用到书中几

    段代码不需要许可。销售和分发包含 O'Reilly 书籍中例子的 CD-ROM 需要获得许可。援引

    本书和书中的例子来回答问题不需要许可。大量的将本书中的例子纳入你的产品文档将需要

    获得许可。

    我们希望但不是一定要求被参考文献引用。一个引用通常包括标题,作者,出版者和 I

    SBN 。例如: “Python 自然语言处理, Steven Bird , Ewan Klein 和 Edward Loper 。版权所有

    2009 Steven Bird, Ewan Klein 和 Edward Loper, 978-0-596-51649-9 。 ” 如果你觉得你使用本

    书的例子代码超出了上面列举的一般用途或许可,随时通过 permissions@oreilly.com 联系我

    们。

    Safari Sa fari Safari Safari? ? ? ? 联机丛书 联机丛书 联机 丛书 联机丛书

    当你看到你喜爱的技术书的封面上印有 Safari

    联机丛书的图标时,这意味着

    这本书可以在 O'Reilly 网络 Safari 书架上找到。

    Safari 提供比电子书更好的解决方案。它是一个虚拟图书馆,你可以轻

    松搜索数以千计的顶尖技术书籍,剪切和粘贴例子代码,下载一些章节,并在你需要最准确

    最新的信息时快速找到答案。欢迎免费试用 http:my.safaribooksonline.com 。

    如何联系我们 如何联系 我们 如何联系我们 如何联系我们

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

    O'Reilly Media 公司

    1005 Gravenstein Highway North

    Sebastopol, CA 95472

    800-998-9938 (在美国或加拿大)

    707-829-0515 (国际或本地)

    707-829-0104 (传真)

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

    http:www.oreilly.comcatalog9780596516499

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

    http:www.nltk.org

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

    bookquestions@oreilly.com

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

    站:

    http:www.oreilly.com

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!22

    致谢致谢致谢致谢

    作者感激为本书早期手稿提供反馈意见的人,他们是: 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 In

    durkhya, Mark Liberman, Peter Ljungl?f, Stefan Müller, Robin Munn, Joel Nothman, Ada

    m Przepiorkowski, Brandon Rhodes, Stuart Robinson, Jussi Salmela, Kyle Schlansker, Rob

    Speer 和 Richard Sproat 。感谢许许多多的学生和同事,他们关于课堂材料的意见演化成本

    书的这些章节,其中包括巴西,印度和美国的 NLP 与语言学暑期学校的参加者。没有 NLT

    K 开发社区的成员们的努力这本书也不会存在,他们为建设和壮大 NLTK 无私奉献他们的时

    间和专业知识,他们的名字都记录在 NLTK 网站上。

    非常感谢美国国家科学基金会、语言数据联盟、 Edward Clarence Dyason 奖学金、宾州

    大学、爱丁堡大学和墨尔本大学对我们在本书相关的工作上的支持。

    感谢 Julie Steele 、 Abby Fox 、 Loranah Dimant 以及其他 O'Reilly 团队成员。他们组织

    大量 NLP 和 Python 社区成员全面审阅我们的手稿,很高兴的为满足我们的需要定制 O'Reil

    ly 的生成工具。感谢他们一丝不苟的审稿工作。

    最后,我们对我们的合作伙伴欠了巨额的感情债,他们是 Kay 、 Mimo 和 Jee 。感谢在

    我们写作本书的几年里他们付出的爱心、耐心和支持。我们希望我们的孩子—— Andrew, A

    lison 、 Kirsten 、 Leonie 和 Maaike ——能从这些页面中赶上我们对语言和计算的热情。

    版税版税版税版税

    出售这本书的版税将被用来支持自然语言工具包的发展。

    图 P-1. Edward Loper , Ewan Klein 和 Steven Bird ,斯坦福大学, 2007 年 7 月

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!23

    第 1 1 1 1 章 语言处理与 Python Py thon Python Python

    上百万字的文本,是容易拿到手的。假设我们会写一些简单的程序,那我们可以用它来

    做些什么?在本章中,我们将解决以下几个问题:

    1. 将简单的程序与大量的文本结合起来,我们能实现什么?

    2. 我们如何能自动提取概括文本风格和内容的关键词和短语?

    3. Python 编程语言为上述工作提供了哪些工具和技术?

    4. 自然语言处理中的有哪些有趣的挑战?

    本章分为完全不同风格的两部分。在 “ 语言计算 ” 部分,我们将选取一些语言相关的编程

    任务而不去解释它们是如何实现的。在 “ 近观 Python” 部分,我们将系统地回顾关键的编程概

    念。两种风格将按章节标题区分,而后面几章将混合两种风格而不作明显的区分。我们希望

    这种风格的介绍能使你对接下来将要碰到的内容有一个真实的体味,与此同时,涵盖语言学

    与计算机科学的基本概念。如果你对这两个方面已经有了基本的了解,可以跳到 1.5 节。我

    们将在后续的章节中重复所有要点,如果错过了什么,你可以很容易地在 http:www.nltk.or

    g 上查询在线参考材料。如果这些材料对你而言是全新的,那么本章将引发比解答本身更多

    的问题,这些问题将在本书的其余部分讨论。

    1.1 1. 1 1.1 1.1 语言计算:文本和单词 语言计算 :文本和单词 语言计算:文本和单词 语言计算:文本和单词

    我们都对文本非常熟悉,因为我们每天都读到和写到。在这里,把文本视为我们写的程

    序的原始数据,这些程序以很多有趣的方式处理和分析文本。但在我们能写这些程序之前 ,我们必须得从 Python 解释器开始。

    Python Py thon Python Python 入门

    Python 对用户友好的一个方式是你可以在交互式 解释器 ——将要运行你的 Python 代码

    的程序——里面直接打字。你可以通过一个简单的叫做交互式开发环境( Interactive DeveL

    opment Environment ,简称 IDLE )的图形接口来访问 Python 解释器。在 Mac 上,你可以在

    “应用程序→ 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 darwin

    Type help, copyright, credits or license for more information.

    >>>

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!24

    如果你无法运行 Python 解释器可能是因为没有正确安装 Python 。请访问 h

    ttp:python.org 查阅详细操作说明。

    >>> 提示符表示 Python 解释器正在等待输入。复制这本书的例子时,自己不要键入“ >

    >> ”。现在,让我们开始把 Python 当作计算器使用:

    > 一旦解释器计算并显示出答案,提示符就会出现。这表示 Python 解释器在等待另一个

    指令。

    轮到你来: 输入一些你自己的表达式。你可以使用星号( )表示乘法,左斜线表示除法,你可以用括号括起表达式。请注意:除法并不总是像你

    可能期望的那样。当你输入 13 时是整数除法(小数会被四舍五入),输

    入 1.03.0 时是“浮点数”(或十进制)除法。要想获得通常我们期望的除

    法(在 Python3.0 中是标准),你需要输入: from __future__import divisi

    on 。

    前面的例子演示了如何交互式的使用 Python 解释器,试验 Python 语言中各种表达式 ,看看它们做些什么。现在让我们尝试一个无意义的表达式,看看解释器如何处理:

    >>> 1 +

    File , line 1

    1 +

    ^

    SyntaxError: invalid syntax

    >>>

    产生了一个语法错误。在 Python 中,指令以加号结尾是没有意义的。 Python 解释器会

    指出发生错误的行( 的第 1 行, 表示“标准输入”)。

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

    NLTK NL TK NLTK NLTK 入门

    首先应该安装 NLTk 。可以从 http:www.nltk.org 。按照说明下载适合你的操作

    系统的版本。

    安装完 NLTK 之后,像前面那样启动 Python 解释器。在 Python 提示符后面输入下面两

    个命令来安装本书所需的数据,然后选择 book ,如图 1-1 所示。

    >>> import nltk

    >>> nltk.download

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!25

    图 1-1 . 下载 NLTK 图书集:使用 nltk.download 浏览可用的软件包。下载器上的 Collectio

    ns 选项卡显示软件包如何被打包分组。选择 book 标记所在行 ,可以 获取本书 的 例子和练

    习所需的全部数据 。 这些数据包括约 30 个压缩文件 , 需要 100MB 硬盘空间 。 完整的数据集

    ( 即 下载器中的 all )在本书写作期间大约是这个大小的 5 倍,还在不断扩充。

    一旦数据被下载到你的机器,你就可以使用 Python 解释器加载其中一些。第一步是 在

    Python 提示符后输入一个特殊的命令 , 告诉解释器去加载一些我们要用的文本: from nlt

    k.book import 。这条语句是说 “ 从 NLTK 的 book 模块加载所有的东西 ” 。这个 boo

    k 模块包含你阅读本章所需的所有数据 。 在输出欢迎信息之后 , 将会加载几本书的文本 ( 这

    将需要几秒钟 ) 。下面连同你将看到的输出一起再次列出这条命令,注意拼写和标点符号的

    正确性,记住不要输入 >>> 。

    >>> from nltk.book import

    Introductory Examples for the NLTK Book

    Loading text1, ..., text9 and sent1, ..., sent9

    Type the name of the text or sentence to view it.

    Type: 'texts' or 'sents' to list the materials.

    text1: Moby Dick by Herman Melville 1851

    text2: Sense and Sensibility by Jane Austen 1811

    text3: The Book of Genesis

    text4: Inaugural Address Corpus

    text5: Chat Corpus

    text6: Monty Python and the Holy Grail

    text7: Wall Street Journal

    text8: Personals Corpus

    text9: The Man Who Was Thursday by G . K . Chesterton 1908

    >>>

    任何时候我们想要找到这些文本,只需要在 Python 提示符后输入它们的名字。

    >>> text1

    

    >>> text2

    

    >>>

    现在我们可以和这些数据一起来使用 Python 解释器,我们已经准备好上手了。

    欢迎加入非盈利Python编程学习交流程QQ群783462347,群里免费提供500+本Python书籍!26

    搜索文本

    除了阅读文本之外 , 还有很多方法可以用来研究文本内容 。 词语索引视图显示一个指

    定单词的每一次出现,连同一些上下文一起显示。下面我们输入 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 r

    ll over with a heathenish array of monstrous clubs and spears . Some were thick

    d as you gazed , and wondered what monstrous cannibal and savage could ever hav

    that has survived the flood ; most monstrous and most mountainous ! That Himm

    they might scout at Moby Dick as a monstrous fable , or still worse and more de

    h of Radney .' CHAPTER 55 Of the monstrous Pictures of Whales . I shall ere l

    ing Scenes . In connexion with the ......

您现在查看是摘要介绍页, 详见PDF附件(4555KB,382页)