本書將教會讀者如何在Java庫的幫助下執(zhí)行語言分析,同時不斷地從結(jié)果中獲得見解。首先介紹NLP及其各種概念是如何工作的,然后探索Java中用于NLP的重要工具和庫,如CoreNLP、OpenNLP、Neuroph、Mallet等。之后,讀者將開始對不同的輸入和任務執(zhí)行NLP,例如標記、模型訓練、部分語音、解析樹等。讀者會學習到統(tǒng)計機器翻譯、摘要、對話系統(tǒng)、復雜搜索、有監(jiān)督和無監(jiān)督的NLP,以及其他內(nèi)容。在本書的*后,讀者也會學習到更多關(guān)于NLP、神經(jīng)網(wǎng)絡和其他各種Java中用于增強NLP應用程序性能的訓練模型。
譯者序
前言
作者簡介
審校者簡介
第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 關(guān)系提取 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 準備數(shù)據(jù) 21
1.9 總結(jié) 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 了解規(guī)范化 42
2.5.1 轉(zhuǎn)換成小寫 42
2.5.2 刪除停用詞 43
2.5.3 使用詞干分析 45
2.5.4 使用詞元化 48
2.5.5 使用管道進行標準化處理 51
2.6 總結(jié) 52
第3章 文本斷句 53
3.1 SBD方法 53
3.2 SBD難在何處 54
3.3 理解LingPipe的HeuristicSentenceModel類的SBD規(guī)則 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 總結(jié) 76
第4章 人物識別 77
4.1 NER難在何處 78
4.2 NER方法 78
4.2.1 列表和正則表達式 79
4.2.2 統(tǒng)計分類器 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注釋工具構(gòu)建新數(shù)據(jù)集 93
4.6 訓練模型 98
4.7 總結(jié) 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 總結(jié) 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 總結(jié) 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 計分和術(shù)語加權(quán) 144
7.5 逆文檔頻率 145
7.6 TF-IDF加權(quán) 145
7.7 信息檢索系統(tǒng)的評估 145
7.8 總結(jié) 146
第8章 對文本和文檔進行分類 147
8.1 如何使用分類 147
8.2 理解情感分析 148
8.3 文本分類技術(shù) 150
8.4 使用API對文本進行分類 151
8.4.1 使用OpenNLP 151
8.4.2 使用Stanford API 154
8.4.3 使用LingPipe對文本進行分類 158
8.5 總結(jié) 165
第9章 主題建模 166
9.1 什么是主題建模 166
9.2 LDA的基礎(chǔ) 167
9.3 使用MALLET進行主題建模 168
9.3.1 訓練 168
9.3.2 評價 168
9.4 總結(jié) 171
第10章 使用解析器提取關(guān)系 172
10.1 關(guān)系類型 173
10.2 理解解析樹 174
10.3 使用提取的關(guān)系 175
10.4 提取關(guān)系 178
10.5 使用NLP API 178
10.5.1 使用OpenNLP 178
10.5.2 使用Stanford API 181
10.5.3 查找共指消解實體 184
10.6 為問答系統(tǒng)提取關(guān)系 186
10.6.1 查找單詞依賴關(guān)系 186
10.6.2 確定問題類型 187
10.6.3 尋找答案 188
10.7 總結(jié) 190
第11章 組合管道 192
11.1 準備數(shù)據(jù) 193
11.1.1 使用Boilerpipe從HTML抽取文本 193
11.1.2 使用POI從Word文檔中抽取文本 195
11.1.3 使用PDFBox從PDF文檔抽取文本 200
11.1.4 使用Apache Tika進行內(nèi)容分析和抽取 201
11.2 管道 203
11.2.1 使用Stanford管道 203
11.2.2 在Stanford管道中使用多核處理器 205
11.3 創(chuàng)建用于搜索文本的管道 206
11.4 總結(jié) 211
第12章 創(chuàng)建一個聊天機器人 212
12.1 聊天機器人架構(gòu) 213
12.2 人工語言網(wǎng)絡計算機實體 214
12.2.1 了解AIML 214
12.2.2 使用ALICE和AIML開發(fā)聊天機器人 216
12.3 總結(jié) 221