本書將教會讀者如何在Java庫的幫助下執(zhí)行語言分析,同時不斷地從結(jié)果中獲得見解。首先介紹NLP及其各種概念是如何工作的,然后探索Java中用于NLP的重要工具和庫,如CoreNLP、OpenNLP、Neuroph、Mallet等。之后,讀者將開始對不同的輸入和任務(wù)執(zhí)行NLP,例如標(biāo)記、模型訓(xùn)練、部分語音、解析樹等。讀者會學(xué)習(xí)到統(tǒng)計機(jī)器翻譯、摘要、對話系統(tǒng)、復(fù)雜搜索、有監(jiān)督和無監(jiān)督的NLP,以及其他內(nèi)容。在本書的*后,讀者也會學(xué)習(xí)到更多關(guān)于NLP、神經(jīng)網(wǎng)絡(luò)和其他各種Java中用于增強(qiáng)NLP應(yīng)用程序性能的訓(xùn)練模型。
譯者序
前言
作者簡介
審校者簡介
第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深度學(xué)習(xí) 10
1.6 文本處理任務(wù)概述 11
1.6.1 查找文本的各部分 11
1.6.2 文本斷句 13
1.6.3 特征工程 14
1.6.4 查找人物和事件 14
1.6.5 詞性判斷 16
1.6.6 對文本和文檔進(jìn)行分類 17
1.6.7 關(guān)系提取 17
1.6.8 使用組合方法 19
1.7 理解NLP方法 19
1.7.1 識別任務(wù) 19
1.7.2 選擇模型 20
1.7.3 建立并訓(xùn)練模型 20
1.7.4 驗(yàn)證模型 20
1.7.5 運(yùn)用模型 21
1.8 準(zhǔn)備數(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 訓(xùn)練分詞器找出文本的各部分 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 使用管道進(jìn)行標(biāo)準(zhǔn)化處理 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 使用正則表達(dá)式 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 訓(xùn)練文本斷句模型 73
3.6.1 使用訓(xùn)練好的模型 75
3.6.2 使用SentenceDetector-Evaluator類評估模型 75
3.7 總結(jié) 76
第4章 人物識別 77
4.1 NER難在何處 78
4.2 NER方法 78
4.2.1 列表和正則表達(dá)式 79
4.2.2 統(tǒng)計分類器 80
4.3 使用正則表達(dá)式進(jìn)行NER 80
4.3.1 使用Java的正則表達(dá)式來尋找實(shí)體 80
4.3.2 使用LingPipe的RegEx-Chunker類 82
4.4 使用NLP API 83
4.4.1 使用OpenNLP進(jìn)行NER 83
4.4.2 使用Stanford API進(jìn)行NER 88
4.4.3 使用LingPipe進(jìn)行NER 89
4.5 使用NER注釋工具構(gòu)建新數(shù)據(jù)集 93
4.6 訓(xùn)練模型 98
4.7 總結(jié) 101
第5章 詞性判斷 102
5.1 詞性標(biāo)注 102
5.1.1 詞性標(biāo)注器的重要性 104
5.1.2 詞性標(biāo)注難在何處 105
5.2 使用NLP API 106
5.2.1 使用OpenNLP POS標(biāo)注器 107
5.2.2 使用 Stanford POS標(biāo)注器 115
5.2.3 使用LingPipe POS標(biāo)注器 120
5.2.4 訓(xùn)練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章 對文本和文檔進(jìn)行分類 147
8.1 如何使用分類 147
8.2 理解情感分析 148
8.3 文本分類技術(shù) 150
8.4 使用API對文本進(jìn)行分類 151
8.4.1 使用OpenNLP 151
8.4.2 使用Stanford API 154
8.4.3 使用LingPipe對文本進(jìn)行分類 158
8.5 總結(jié) 165
第9章 主題建模 166
9.1 什么是主題建模 166
9.2 LDA的基礎(chǔ) 167
9.3 使用MALLET進(jìn)行主題建模 168
9.3.1 訓(xùn)練 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 查找共指消解實(shí)體 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 準(zhǔn)備數(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進(jìn)行內(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)建一個聊天機(jī)器人 212
12.1 聊天機(jī)器人架構(gòu) 213
12.2 人工語言網(wǎng)絡(luò)計算機(jī)實(shí)體 214
12.2.1 了解AIML 214
12.2.2 使用ALICE和AIML開發(fā)聊天機(jī)器人 216
12.3 總結(jié) 221