内容简介
自然语言处理(NLP)是应用程序开发的重要领域,在解决实际问题中起着越来越重要的作用。NLP任务支持的自然语言可访问应用程序需求显著增。本书将探索如何使用诸如全文本搜索、专有名称识别、聚类、标记、信息提取、汇总等方法自主组织文本。书中涵盖了NLP的概念,即使没有统计或自然语言处理背景的人也可以理解它。
作者简介
bout the Author
作者简介
Richard M. Reese曾就职于学术界和工业界。他曾在电信和航天工业领域工作17年,期间曾担任研发、软件开发、监督和培训等多个职位。他目前任教于塔尔顿州立大学,运用他多年来积累的行业经验来完善他的课程。
Richard曾出版过关于Java和C的书籍,他使用简洁易用的方法讨论主题,这些书籍包括《EJB 3.1 Cookbook》,有关Java 7和Java 8的新功能、Java认证以及jMonkey引擎,以及一本关于C指针的书。
我要感谢我的女儿詹妮弗,因她发表了很多评论,并做出很大贡献。她的付出是无价的。
目录
CONTENTS
目 录
译者序
作者简介
审校者简介
前言
第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.4NLP分词器的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.1SBD方法 56
3.2SBD难在何处 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.1NER难在何处 84
4.2NER的方法 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.1OpenNLP的使用 136
6.4.2Stanford 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.1OpenNLP的使用 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
前言/序言
PREFACE前 言自然语言处理(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知识。
Java自然语言处理 下载 mobi epub pdf txt 电子书 格式