Java自然语言处理

更多详情

内容简介: 自然语言处理(NLP)是应用程序开发的重要领域,在解决实际问题中起着越来越重要的作用。NLP任务支持的自然语言可访问应用程序需求显著增。本书将探索如何使用诸如全文本搜索、专有名称识别、聚类、标记、信息提取、汇总等方法自主组织文本。书中涵盖了NLP的概念,即使没有统计或自然语言处理背景的人也可以理解它。


目录: 译者序
作者简介
审校者简介
前言
第1章 NLP简介 1
1.1 什么是NLP 2
1.2 为何使用NLP 3
1.3 NLP的难点 4
1.4 NLP工具汇总 5
1.4.1 Apache OpenNLP 6
1.4.2 Stanford NLP 7
1.4.3 LingPipe 9
1.4.4 GATE 10
1.4.5 UIMA 10
1.5 文本处理概览 10
1.5.1 文本分词 11
1.5.2 文本断句 12
1.5.3 人物识别 14
1.5.4 词性判断 16
1.5.5 文本分类 17
1.5.6 关系提取 18
1.5.7 方法组合 20
1.6 理解NLP模型 20
1.6.1 明确目标 20
1.6.2 选择模型 21
1.6.3 构建、训练模型 21
1.6.4 验证模型 22
1.6.5 使用模型 22
1.7 准备数据 22
1.8 本章小结 24
第2章 文本分词 25
2.1 理解文本分词 25
2.2 什么是分词 26
2.3 一些简单的Java分词器 28
2.3.1 使用Scanner类 29
2.3.2 使用split方法 30
2.3.3 使用BreakIterator类 31
2.3.4 使用StreamTokenizer类 32
2.3.5 使用StringTokenizer类 34
2.3.6 使用Java核心分词法的性能考虑 34
2.4 NLP分词器的API 34
2.4.1 使用OpenNLPTokenizer类分词器 35
2.4.2 使用Stanford分词器 37
2.4.3 训练分词器进行文本分词 41
2.4.4 分词器的比较 44
2.5 理解标准化处理 45
2.5.1 转换为小写字母 45
2.5.2 去除停用词 46
2.5.3 词干化 49
2.5.4 词形还原 51
2.5.5 使用流水线进行标准化处理 54
2.6 本章小结 55
第3章 文本断句 56
3.1 SBD方法 56
3.2 SBD难在何处 57
3.3 理解LingPipe的HeuristicSen-tenceModel类的SBD规则 59
3.4 简单的Java SBD 60
3.4.1 使用正则表达式 60
3.4.2 使用BreakIterator类 62
3.5 使用NLP API 63
3.5.1 使用OpenNLP 64
3.5.2 使用Stanford API 66
3.5.3 使用LingPipe 74
3.6 训练文本断句模型 78
3.6.1 使用训练好的模型 80
3.6.2 使用SentenceDetector-Evaluator类评估模型 81
3.7 本章小结 82
第4章 人物识别 83
4.1 NER难在何处 84
4.2 NER的方法 84
4.2.1 列表和正则表达式 85
4.2.2 统计分类器 85
4.3 使用正则表达式进行NER 86
4.3.1 使用Java的正则表达式来寻找实体 86
4.3.2 使用LingPipe的RegEx-Chunker类 88
4.4 使用NLP API 89
4.4.1 使用OpenNLP进行NER 89
4.4.2 使用Stanford API进行NER 95
4.4.3 使用LingPipe进行NER 96
4.5 训练模型 100
4.6 本章小结 103
第5章 词性判断 104
5.1 词性标注 104
5.1.1 词性标注器的重要性 107
5.1.2 词性标注难在何处 107
5.2 使用NLP API 109
5.2.1 使用OpenNLP词性标注器 110
5.2.2 使用Stanford词性标注器 118
5.2.3 使用LingPipe词性标注器 125
5.2.4 训练OpenNLP词性标注模型 129
5.3 本章小结 131
第6章 文本分类 132
6.1 文本分类问题 132
6.2 情感分析介绍 134
6.3 文本分类技术 135
6.4 使用API进行文本分类 136
6.4.1 OpenNLP的使用 136
6.4.2 Stanford API的使用 140
6.4.3 使用LingPipe进行文本分类 145
6.5 本章小结 152
第7章 关系提取 153
7.1 关系类型 154
7.2 理解解析树 155
7.3 关系提取的应用 156
7.4 关系提取 159
7.5 使用NLP API 159
7.5.1 OpenNLP的使用 159
7.5.2 使用Stanford API 162
7.5.3 判断共指消解的实体 166
7.6 问答系统的关系提取 168
7.6.1 判断单词依赖关系 169
7.6.2 判断问题类型 170
7.6.3 搜索答案 171
7.7 本章小结 173
第8章 方法组合 174
8.1 准备数据 175
8.1.1 使用Boilerpipe从HTML中提取文本 175
8.1.2 使用POI从Word文档中提取文本 177
8.1.3 使用PDFBox从PDF文档中提取文本 181
8.2 流水线 182
8.2.1 使用Stanford流水线 182
8.2.2 在Standford流水线中使用多核处理器 187
8.3 创建一个文本搜索的流水线 188
8.4 本章小结 193

译者序: 近些年来,人工智能领域的研究与应用已经成为全球性的科技热点,作为计算机科学领域与人工智能领域中的一个重要方向,而自然语言处理涉及语言学、计算机科学、数学等多种学科,必然也会受到越来越多的关注。因此,本书的出版正为其时,正当其用。
美国塔尔顿州立大学教授Richard M Reese的这本书是一部自然语言处理领域的著作。全书内容丰富,对自然语言处理的基础知识进行了全面描述与总结。本书详细介绍了自然语言处理的多种技术,包括NLP工具、文本分词、文本断句、词性判断、人物识别、文本分类、关系提取以及组合应用等,结合多个示例进行深入分析,并采用Java编程语言进行处理与结果分析。
翻译一本教科书式的英文原著,真的是一次非常难忘的经历,感谢机械工业出版社给我提供了这样的机会,我也尽量保持了原著的风格和行文特点。承蒙多位学者鼓励,译者有幸将国外优秀的原著介绍给广大读者,我在此表示衷心的感谢,同时感谢出版社编辑对文稿做了大量处理工作。无论您是工程师、科研工作者、学生,还是教师,希望在阅读本书后都能够有一定的收获。
虽然我已经竭尽全力还原原著的本意,也进行了多轮校稿和通读,但由于时间以及水平有限,难免有不当之处,敬请广大读者见谅并赐正。
邹 伟
2017年11月20日

前言: 自然语言处理(NLP)已用于解决各种各样的问题,包括对搜索引擎的支持,对网页文本的总结与分类,以及结合机器学习技术解决诸如语音识别、查询分析等问题。它已经在任何包含有用信息的文件中使用。
NLP用于增强应用程序的实用性和功能,主要通过简化用户输入以及将文本转换成更加可用的形式来实现。实际上,NLP能够处理各种来源的文本,使用一系列核心NLP任务从文本中转化或提取信息。
本书重点介绍NLP应用中可能遇到的核心NLP任务,每个NLP任务都从问题的描述以及可应用领域开始。介绍每项任务中比较困难的问题,以便你能更好地理解问题。随后通过使用大量的Java技术和API来支持NLP任务。
本书涵盖内容
第1章解释了NLP的重要性和用法。本章以简单的例子来解释如何使用NLP技术。
第2章主要讨论标记化,标记化是使用更为先进的NLP技术的第一步,本章介绍了核心Java和Java NLP标记化API。
第3章证明句子边界消歧技术是一个重要的NLP任务。这一步是其他许多下游NLP任务的预处理步骤,其中文本元素不应跨越句子边界进行分隔。这样就可以确保所有短语都在一个句子中,并支持词性分析。
第4章涵盖了通常所说的命名实体识别。这个任务主要涉及识别人、地点和文本中相似的实体。该技术是处理查询和搜索的初始步骤。
第5章说明如何检测词性,词性是文本中的语法元素,例如名词和动词。识别这些元素是确定文本含义和检测文本内关系的重要步骤。
第6章证明文本分类对于垃圾邮件检测和情感分析等任务非常有用。此外,本章也对支持文本分类的NLP技术进行了调查和说明。
第7章演示解析树。解析树可应用于很多目的,其中包括信息提取。信息提取拥有这些元素之间关系的信息。通过一个实现简单查询的例子来说明这个过程。
第8章包含从各种类型的文件(如PDF和Word文件)中提取数据的技术。接下来主要介绍了如何将以前的NLP技术结合至一个管道中以解决更大的问题。
阅读本书的技术准备
Java SDK 7用于说明NLP技术。各种NLP API是必需的并可以随时下载。IDE可选择,并不做强制要求。
本书读者对象
对NLP技术感兴趣的、有Java经验的开发人员会发现这本书很有用。不需要事先具备NLP知识。