本书将教会读者如何在Java库的帮助下执行语言分析,同时不断地从结果中获得见解。首先介绍NLP及其各种概念是如何工作的,然后探索Java中用于NLP的重要工具和库,如CoreNLP、OpenNLP、Neuroph、Mallet等。之后,读者将开始对不同的输入和任务执行NLP,例如标记、模型训练、部分语音、解析树等。读者会学习到统计机器翻译、摘要、对话系统、复杂搜索、有监督和无监督的NLP,以及其他内容。在本书的最后,读者也会学习到更多关于NLP、神经网络和其他各种Java中用于增强NLP应用程序性能的训练模型。
封面图
目录
- 译者序
- 前言
- 作者简介
- 审校者简介
- 第1章NLP概论 1
- 1.1NLP是什么 2
- 1.2为什么使用NLP 2
- 1.3为什么NLP这么难 3
- 1.4NLP工具汇总 4
- 1.4.1Apache OpenNLP 5
- 1.4.2Stanford NLP 7
- 1.4.3LingPipe 8
- 1.4.4GATE 9
- 1.4.5UIMA 9
- 1.4.6Apache Lucene Core 10
- 1.5Java深度学习 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.6Java核心分词的性能考虑 32
- 2.4NLP分词器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.1SBD方法 53
- 3.2SBD难在何处 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.1NER难在何处 78
- 4.2NER方法 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.1n-gram 127
- 6.2词嵌入 129
- 6.3GloVe 131
- 6.4word2vec 133
- 6.5降维 134
- 6.6主成分分析 134
- 6.7t-SNE 135
- 6.8总结 138
- 第7章信息检索 139
- 7.1布尔检索 139
- 7.2字典和容错性检索 141
- 7.2.1通配符查询 141
- 7.2.2拼写校正 142
- 7.2.3Soundex 143
- 7.3向量空间模型 143
- 7.4计分和术语加权 144
- 7.5逆文档频率 145
- 7.6TF-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.2LDA的基础 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