用python进行自然语言处理

时间:2022-01-19 06:38:55

用python进行自然语言处理

Table of Contents

1 语言处理与Python

1.1 语言计算: 文本和单词

  • nltk下载各种资源在python环境下面执行>>>nltk.download()
  • 在nltk下面下载的书籍命名为text*,如果要导入书籍的时候执行>>> from nltk.book import *
  • 搜索文本
    • >>>text1.concordance("monstrous") 在text1中搜索monstrous,显示其和周围的内容
    • >>>text1.similar("monstrous") 在text1中搜索和monstrous相似的词汇
    • >>>text1.common\contexts(["monstrous","very"]) 比较text1中这两个词汇的共同上下文
    • >>>text1.dispersion\plot(["citizens", "democracy", "freedom", "duties", "America"]) 画离散图(不是很清楚这个的作用)
    • >>>text3.generate() 自动生成一些text3风格的文本
  • 统计词汇
    • >>>len(text3) 统计text3中的词和标点符号书目
    • >>>len(set(text3)) 统计text3中不同的词汇和符号的数量
    • >>>text3.count("smoke") 统计text3中smoke出现的次数

1.2 计算语言: 简单的统计

  • 频率分布
    • >>>FreqDist(text1).keys()[:50] 获取text1中词频最高的50个词
    • >>>FreqDist(text1)['whale] 获取text1中whale出现的次数
    • >>>FreqDist(text1).plot(50, cumulative = True) 画前50个词占文章的总比例
    • >>>FreqDist(text1).hapaxes() 显示仅出现一次的词
  • 细粒度选择词
    • >>>v = set(text1); long\words = [w for w in v if len(w) > 15]
  • 词语搭配和双连词(bigrams)
    • >>>bigrams(["more", "is", "said", "than", "done"]) 返回下面词组可能的组合
    • >>>text4.collocations() 返回text4中常用的bigram
  • NLTK中频率分布类中定义的函数
    • >>>fdist = FreqDist(sample) 创建包含给定样本的频率分布
    • >>>fdist.inc(sample) 增加样本
    • >>>fdist['monstours'] 统计单词monstous出现的次数
    • >>>fdist.freq('monstours') 统计monstrous的频率
    • >>>fdist.N() 样本总数
    • >>>fdist.keys() 以频率递减顺序排序样本链表
    • >>>fdist.max() 返回数值最大的样本
    • >>>fdist.plot() 绘制频率分布图 cumulative = True是绘制累计频率分布图

1.3 自动理解自然语言

  • 机器翻译
    • nltk.book下面有个函数babelizeshell()可以用来尝试机器翻译
  • 人机对话系统
    • nltk.chat.chatbots()函数尝试人机对话 (import nltk)

2 获得文本语料和词汇资源

2.1 获取文本语料库

  • 故腾堡语料库
    • >>>nltk.corpus.gutenberg.fields() %输出语料库中的书籍名称 p54
    • >>>len(nltk.corpus.gutenberg.words('austen-emma.txt')) %统计《爱玛》中词的个数 p55
    • >>>nltk.Text(nltk.corpus.gutenberg.words('austen-emma.txt')).concordance('surpirze') %统计在emma中surpize出现的次数 p55
    • >>>sents()函数将文本化分成句子 p56
  • 聊天和网络文本
    • >>> nltk.corpus.webtext p56
    • >>> nltk.corpus.npschat
  • 布朗语料库
    • >>> from nltk.corpus import brown
    • >>> brown.categories()

2.2 条件频率分布

2.3 词典资源

2.4 WordNet

3 全书目录

目录
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
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.5 WordNet..79
意义与同义词 79
WordNet 的层次结构.. 81
更多的词汇关系82
语义相似度.83
2.6 小结 84
2.7 深入阅读.. 85
2.8 练习 85
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
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
NumPy166
其他 Python 库.167
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
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
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
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
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