首页>参考读物>计算机科学与技术>人工智能

Java自然语言处理(原书第2版)
作者 : [美] 理查德·M.里斯(Richard M. Reese)[印] 艾希什辛格·巴蒂亚(AshishSingh Bhatia)著
译者 : 邹伟 李妍 武现臣 译
出版日期 : 2020-06-29
ISBN : 978-7-111-65787-3
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 234
开本 : 16
原书名 : Natural Language Processing with Java, Second Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书将教会读者如何在Java库的帮助下执行语言分析,同时不断地从结果中获得见解。首先介绍NLP及其各种概念是如何工作的,然后探索Java中用于NLP的重要工具和库,如CoreNLP、OpenNLP、Neuroph、Mallet等。之后,读者将开始对不同的输入和任务执行NLP,例如标记、模型训练、部分语音、解析树等。读者会学习到统计机器翻译、摘要、对话系统、复杂搜索、有监督和无监督的NLP,以及其他内容。在本书的最后,读者也会学习到更多关于NLP、神经网络和其他各种Java中用于增强NLP应用程序性能的训练模型。

图书特色

图书前言

自然语言处理(Natural Language Processing,NLP)允许使用任何句子并识别模式、特殊名称、公司名称等。本书将教会你如何在Java库的帮助下执行语言分析,同时不断地从结果中获得见解。
首先你会了解NLP及其各种概念。掌握了基础知识之后,你将探索Java中用于NLP的重要工具和库,如CoreNLP、OpenNLP、Neuroph、Mallet等。然后,你将开始对不同的输入和任务执行NLP,例如分词、模型训练、词性标注、解析树等。你会学习到统计机器翻译、提取摘要、对话系统、复杂搜索、有监督和无监督的NLP等内容。在本书的最后,你也会学到更多关于NLP、神经网络和Java中用于增强NLP应用程序性能的其他各种训练模型。
本书读者
如果你是数据分析师、数据科学家或机器学习工程师,希望使用Java从一种语言中提取信息,那么本书非常适合你。本书需要你有Java编程基础,而对统计数据有基本的了解有助于阅读本书,但这不是必需的。
本书涵盖的内容
第1章阐述NLP的重要性和用途。本章通过简单的例子对如何使用NLP技术进行了说明。
第2章主要关注分词。这是完成更高级的NLP任务的第一步。本章介绍了核心Java和Java NLP分词的API。
第3章论证句子边界消歧是一个重要的NLP任务。这个步骤是许多其他下游NLP任务的前驱,在这些任务中,文本元素不应该跨句子边界拆分。这可以确保所有短语都在一个句子中,并支持词性分析。
第4章涵盖通常所说的命名实体识别(Named Entity Recognition,NER)。这个任务与在文本中标识人、位置和类似实体有关。这个技术是处理查询和搜索的预备步骤。
第5章会向你展示如何检测词性。词性是文本的语法元素,如名词和动词,识别这些元素是确定文本含义和检测文本内部关系的重要步骤。
第6章解释如何使用n-gram表示文本,并概述它们在揭示上下文中所起的作用。
第7章处理信息检索中发现的大量数据,并使用各种方法寻找相关信息,如布尔检索、字典和容错检索。
第8章证明文本分类在垃圾邮件检测和情感分析等任务中是有用的。本章还对支持这一过程的NLP技术进行了研究和说明。
第9章讨论使用包含一些文本的文档进行主题建模的基础知识。
第10章演示解析树。解析树有许多用途,包括信息提取,信息提取保存了关于这些元素之间关系的信息。本章给出了一个实现简单查询的示例来说明这个过程。
第11章讨论围绕使用组合技术解决NLP问题的几个议题。
第12章介绍不同类型的聊天机器人,我们也将开发一个简单的预约聊天机器人。
如何充分利用本书
Java SDK 8用于说明NLP技术。需要的各种NLP API可以随时下载。IDE不是必需的,但有条件的话还是建议下载。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码包也存储在GitHub上,网址为https://github.com/PacktPublishing/Natural-Language-Processing-with-Java-Second-Edition。如果代码有更新,它将会更新到现有的GitHub存储库。
我们还有其他的代码包,它们来自我们丰富的书籍和视频目录,可以在https://github.com/PacktPublishing/上找到。欢迎查找下载。
我们还提供了一个PDF文件,其中有本书中使用的屏幕截图(图表的彩色图像)。你可以在http://www.packtpub.com/sites/default/files/downloads/NaturalLanguageProcessingwithJavaSecondEdition_ColorImages.pdf下载。
排版约定
书中代码块设置如下:

命令行输入或输出样式如下:

上架指导

计算机\人工智能

封底文字

自然语言处理(NLP)允许使用任何句子并识别模式、特殊名称、公司名称等。本书介绍如何在Java类库的帮助下进行语言分析,同时不断地从结果中获得洞见。
本书首先介绍NLP及其相关概念。在理解这些基础知识后,将详细介绍Java中用于NLP的重要工具和库,如CoreNLP、OpenNLP、Neuroph、Mallet等。随后,针对不同的输入和任务(如分词、模型训练、词性标注和解析树)详细讲述如何执行NLP。此外,本书还介绍了统计机器翻译、对话系统、复杂搜索、有监督和无监督的NLP等内容。
通过阅读本书,你将能够:
理解NLP基本任务以及它们之间的关系。
探索和使用有效的分词引擎。
应用检索技术来识别文档中的人名、地名等。
建立句子中词性判断的方法。
使用分析方法在文档中抽取元素间的关系。
识别一组文档的主题。
探索文档的主题模型。

译者序

自然语言处理(NLP)是当前如火如荼的人工智能(AI)技术的重要组成部分,在应用程序开发中起着重要作用,几乎任何一个AI项目都或多或少需要NLP的参与,NLP在解决实际问题中起着越来越重要的作用。
我曾经翻译本书第1版,在第2版出版后,发现第2版做了增补,更加清晰全面地介绍了Java自然语言处理的方式,所以决定翻译这本书。本书从NLP的基本工具开始谈起,解释了自然语言处理包括的技术点,以及能够解决哪些问题;而后,详细地解释NLP的每个技术细节,包括文本分词、文本断句、命名实体识别、词性判断、文本特征、语义检索、文本分类、主体模型、关系抽取、组合管道等;最后,给出了一个聊天机器人的架构和演示。
在具体使用本书时,可以将其作为技术书籍,从第1章开始顺次阅读,也可以选择自己感兴趣的章节,以简单工具书的形式进行查阅参考。
在此,我们译者三人以自己粗浅的认识建议广大读者加强AI和NLP的实践,我们预见,在未来几年,自然语言处理将获得广泛发展。目前国内AI技术的应用非常广泛,除了使用目前火爆异常的深度学习模型来解决NLP的问题以外,我们也强烈建议大家对NLP的经典技术有基础性了解。我现在经营一家科技公司,在我们所完成的50多个AI项目中,半数项目与NLP相关。有些是需要对大范围数据进行舆情监测,有些需要对上市公司的报告进行自动化和半自动化分析,有些需要特定领域的智能推送(我们曾经完成和参与的项目涉及气象、交通、农业、环保、能源等多个领域),有些需要使用NLP对业务进行辅助(如某些时间序列数据的涨跌预测)。第二译者是上海外国语大学的李妍副教授,她在从事管理学、信息技术、网络监测等科研工作时,使用了大量的NLP技术解决了企业的问题,包括舆情监测、企业并购、董事会成员行为分析等。第三译者是令人敬仰的律师武现臣老师,他在面对大量法律案件时,遇到许多类案推送、语义理解等问题,因此具有非常丰富的NLP应用经验。类案推送中,根据某个指定的法律文书,在数千万文书中查找最相似的案件,从而为法官和律师提供参考。语义理解更具备广泛性,如《最高人民法院关于审理人身损害赔偿案件适用法律若干问题的解释》中的第二十条:“受害人有固定收入的,误工费按照实际减少的收入计算。受害人无固定收入的,按照其最后三年的平均收入计算;受害人不能举证证明其最近三年的平均收入状况的,可以参照受诉法院所在地相同或者相近行业上一年度职工的平均工资计算。”只有使用语义理解将其变成合理的数学公式,才能让后续算法自动计算误工费成为可能。
以IT的视角看,自然语言处理是古老的,在计算机诞生不到5年(即1949年),就有人提出了机器翻译设计方案;但自然语言处理同样是年轻的,它正经历着使用机器学习和深度学习的数据驱动方式进行技术更新和迭代。我个人在创业前曾经做过为期数年的在线课程,在一次答疑时有人问:“我是一名即将选择研究方向的准研一学生,人工智能的概念宽泛、方向众多,我应该如何选择呢?” 面对我的百万粉丝和学员,我当时说:“如果导师帮你确定了方向,听导师的;如果可以个人自由选择,我建议选择自然语言处理。”我现在仍然这样认为。

睿客邦CEO邹伟
2020年3月20日

图书目录

译者序
前言
作者简介
审校者简介
第1章 NLP概论 1
1.1 NLP是什么 2
1.2 为什么使用NLP 2
1.3 为什么NLP这么难 3
1.4 NLP工具汇总 4
1.4.1 Apache OpenNLP 5
1.4.2 Stanford NLP 7
1.4.3 LingPipe 8
1.4.4 GATE 9
1.4.5 UIMA 9
1.4.6 Apache Lucene Core 10
1.5 Java深度学习 10
1.6 文本处理任务概述 11
1.6.1 查找文本的各部分 11
1.6.2 文本断句 13
1.6.3 特征工程 14
1.6.4 查找人物和事件 14
1.6.5 词性判断 16
1.6.6 对文本和文档进行分类 17
1.6.7 关系提取 17
1.6.8 使用组合方法 19
1.7 理解NLP方法 19
1.7.1 识别任务 19
1.7.2 选择模型 20
1.7.3 建立并训练模型 20
1.7.4 验证模型 20
1.7.5 运用模型 21
1.8 准备数据 21
1.9 总结 22
第2章 查找文本的各部分 24
2.1 理解文章的各个部分 24
2.2 分词是什么 25
2.3 简单的Java分词器 27
2.3.1 使用Scanner类 27
2.3.2 使用split方法 29
2.3.3 使用BreakIterator类 29
2.3.4 使用StreamTokenizer类 30
2.3.5 使用StringTokenizer类 32
2.3.6 Java核心分词的性能考虑 32
2.4 NLP分词器API 33
2.4.1 使用OpenNLPTokenizer类 33
2.4.2 使用Stanford分词器 35
2.4.3 训练分词器找出文本的各部分 38
2.4.4 分词器比较 41
2.5 了解规范化 42
2.5.1 转换成小写 42
2.5.2 删除停用词 43
2.5.3 使用词干分析 45
2.5.4 使用词元化 48
2.5.5 使用管道进行标准化处理 51
2.6 总结 52
第3章 文本断句 53
3.1 SBD方法 53
3.2 SBD难在何处 54
3.3 理解LingPipe的HeuristicSentenceModel类的SBD规则 55
3.4 简单的Java SBD 56
3.4.1 使用正则表达式 56
3.4.2 使用BreakIterator类 58
3.5 使用NLP API 59
3.5.1 使用OpenNLP 60
3.5.2 使用Stanford API 62
3.5.3 使用LingPipe 69
3.6 训练文本断句模型 73
3.6.1 使用训练好的模型 75
3.6.2 使用SentenceDetector-Evaluator类评估模型 75
3.7 总结 76
第4章 人物识别 77
4.1 NER难在何处 78
4.2 NER方法 78
4.2.1 列表和正则表达式 79
4.2.2 统计分类器 80
4.3 使用正则表达式进行NER 80
4.3.1 使用Java的正则表达式来寻找实体 80
4.3.2 使用LingPipe的RegEx-Chunker类 82
4.4 使用NLP API 83
4.4.1 使用OpenNLP进行NER 83
4.4.2 使用Stanford API进行NER 88
4.4.3 使用LingPipe进行NER 89
4.5 使用NER注释工具构建新数据集 93
4.6 训练模型 98
4.7 总结 101
第5章 词性判断 102
5.1 词性标注 102
5.1.1 词性标注器的重要性 104
5.1.2 词性标注难在何处 105
5.2 使用NLP API 106
5.2.1 使用OpenNLP POS标注器 107
5.2.2 使用 Stanford POS标注器 115
5.2.3 使用LingPipe POS标注器 120
5.2.4 训练OpenNLP POSModel 124
5.3 总结 125
第6章 用特征表示文本 127
6.1 n-gram 127
6.2 词嵌入 129
6.3 GloVe 131
6.4 word2vec 133
6.5 降维 134
6.6 主成分分析 134
6.7 t-SNE 135
6.8 总结 138
第7章 信息检索 139
7.1 布尔检索 139
7.2 字典和容错性检索 141
7.2.1 通配符查询 141
7.2.2 拼写校正 142
7.2.3 Soundex 143
7.3 向量空间模型 143
7.4 计分和术语加权 144
7.5 逆文档频率 145
7.6 TF-IDF加权 145
7.7 信息检索系统的评估 145
7.8 总结 146
第8章 对文本和文档进行分类 147
8.1 如何使用分类 147
8.2 理解情感分析 148
8.3 文本分类技术 150
8.4 使用API对文本进行分类 151
8.4.1 使用OpenNLP 151
8.4.2 使用Stanford API 154
8.4.3 使用LingPipe对文本进行分类 158
8.5 总结 165
第9章 主题建模 166
9.1 什么是主题建模 166
9.2 LDA的基础 167
9.3 使用MALLET进行主题建模 168
9.3.1 训练 168
9.3.2 评价 168
9.4 总结 171
第10章 使用解析器提取关系 172
10.1 关系类型 173
10.2 理解解析树 174
10.3 使用提取的关系 175
10.4 提取关系 178
10.5 使用NLP API 178
10.5.1 使用OpenNLP 178
10.5.2 使用Stanford API 181
10.5.3 查找共指消解实体 184
10.6 为问答系统提取关系 186
10.6.1 查找单词依赖关系 186
10.6.2 确定问题类型 187
10.6.3 寻找答案 188
10.7 总结 190
第11章 组合管道 192
11.1 准备数据 193
11.1.1 使用Boilerpipe从HTML抽取文本 193
11.1.2 使用POI从Word文档中抽取文本 195
11.1.3 使用PDFBox从PDF文档抽取文本 200
11.1.4 使用Apache Tika进行内容分析和抽取 201
11.2 管道 203
11.2.1 使用Stanford管道 203
11.2.2 在Stanford管道中使用多核处理器 205
11.3 创建用于搜索文本的管道 206
11.4 总结 211
第12章 创建一个聊天机器人 212
12.1 聊天机器人架构 213
12.2 人工语言网络计算机实体 214
12.2.1 了解AIML 214
12.2.2 使用ALICE和AIML开发聊天机器人 216
12.3 总结 221

教学资源推荐
作者: 南京大学人工智能学院
作者: [希]西格尔斯·西奥多里蒂斯(Sergios Theodoridis) 著
作者: 肖南峰 等编著
作者: [美]安柯·莫特拉(Ankur Moitra) 著
参考读物推荐
作者: 徐菁 李轩涯 刘倩 计湘婷 编著
作者: 计湘婷 文新 刘倩 李轩涯 编著
作者: [日]伊庭 齐志(Hitoshi Iba) 著
作者: 吴茂贵 郁明敏 朱凤元 张粤磊 等著