《Lucene Java精華版》是2011年出版的圖書,作者是羅剛。本書講解了搜尋引擎相關理論與實際解決方案,並給出了 Java 實現,其中利用了流行的開源項目Lucene和Solr,包括原創的實現。
基本介紹
- 書名:Lucene Java精華版
- 作者:羅剛編著
- ISBN:9787121133930
- 頁數:548頁
- 定價:80元(含DVD光碟1張)
- 出版時間:2011年6月出版
- 開本:16開
內 容 簡 介,前 言,目 錄,
內 容 簡 介
本書是獵兔搜尋開發團隊的軟體研發和教學實踐的經驗匯總。
本書主要包括總體介紹部分、爬虫部分、自然語言處理部分、全文檢索部分以及相關案例分析。爬虫部分介紹了網頁遍歷方法和如何實現增量抓取,並介紹了從網頁等各種格式的文檔中提取主要內容的方法。自然語言處理部分從統計機器學習的原理出發,包括了中文分詞與詞性標註的理論與實現以及在搜尋引擎中的實用等細節,同時對文檔排重、文本分類、自動聚類、句法分析樹、拼寫檢查等自然語言處理領域的經典問題進行了深入淺出的介紹並總結了實現方法。在全文檢索部分,結合Lucene 3.0介紹了搜尋引擎的原理與進展。用簡單的例子介紹了Lucene的最新套用方法。本書包括完整的搜尋實現過程:從完成索引到搜尋用戶界面的實現。本書還進一步介紹了實現準實時搜尋的方法,展示了Solr 1.4版本的用法以及實現分散式搜尋服務集群的方法。最後介紹了在地理信息系統領域和戶外活動搜尋領域的套用。
前 言
2011年3月23日,百度公司股價報收於132.58美元,其市值達到了460.7億美元,超過了騰訊控股前日收盤時的市值,成為中國網際網路企業的老大。為什麼一個搜尋引擎技術公司能有如此高的市值呢?因為搜尋引擎技術本身的套用潛力。筆者相信,智慧型系統會越來越多地改進人們的生活,可以把搜尋引擎作為智慧型系統中先驗知識的來源。例如在遭遇核泄漏事故的日本福島核電站搶險中,已經開始使用機器人在高輻射區域進行監控和輻射水平檢測。但是這樣的機器人只能解決特定問題,清除核輻射的機器人看起來像一個高級的遙控玩具車,而不是一個全功能的機器人。最近幾年,IBM科學家們一直在努力研究一個當前最先進的問答系統,取名為“Watson”(華森)。IBM的智慧型系統華森還只能回答英文問題。如果要讓機器人有更通用的用處,還需要更多的先驗知識作為基礎。
很多搜尋相關的技術已經得到了初步的解決。在國內產業界也已經有很多公司掌握了基本的搜尋開發技術並擁有專業的搜尋技術開發人員。但是越來越多有價值的資訊對現有技術的處理能力仍然是一個挑戰。
為了相對完整地闡述相關知識體系,這本書偏厚,讀者可以直接翻到感興趣的那一頁開始閱讀。如果有心情,從頭開始往下讀當然也很好。為了方便實踐,需要有良好實現的代碼作為參考。為了節約篇幅,書中的代碼只是核心片段。本書相關代碼的完整版本在附帶光碟中可以找到。
作者羅剛在參加編寫本書之前,還獨立撰寫過《自己動手寫搜尋引擎》一書,與王振東共同編寫過《自己動手寫網路爬蟲》。經過10多年的技術積累以及獵兔搜尋技術團隊每年若干的研發投入,相信獵兔已經能夠比以前做得更好。但越是深入接觸客戶的需求,越感覺到技術本身仍需要更多進展,才能滿足實用的需要。寫這本書也是考慮到,也許還需要更多的前進,才能使技術產生質的飛躍。
掌握搜尋開發技術需要有效的學習方法。可以考慮每天學一個算法,就好像降龍十八掌,每天學一種掌法,每天都能感覺到自己的提高。對於有一些基礎的讀者,一個月下來就能感覺到明顯的提升。當然,這樣的學習需要堅持一段時間,然後才能熟練套用。就好像做菜,先大火燒開,然後轉小火慢燉出滋味。
很多相關的論文不容易讀懂,當碰到困難時,可以出去散步,在走路的過程中,可能會得到一些新想法。或者一周后再重新審視這個問題,會有新的認識。
本書分為相關技術總體介紹部分、爬虫部分、全文檢索部分、自然語言處理部分以及相關案例分析。
爬虫部分從基本的爬蟲原理開始講解,通過介紹優先權佇列、寬度優先搜尋等內容引領讀者入門;之後根據當前風起雲湧的雲計算熱潮,重點講述了雲計算的基本原理及其在搜尋中的套用,以及Web圖分析、信息抽取等內容;為了能夠讓讀者更深入地了解爬蟲,本書在最後兩章還介紹了有關爬蟲的數據挖掘的內容。
全文檢索部分重點介紹了搜尋的基本原理與使用。主要介紹了開源軟體實現Lucene以及Solr。不僅介紹如何使用這些開源軟體,而且還會介紹其中的一些實現原理。Lucene更高版本的改進指出了當前需要解決的問題,歡迎讀者在了解基本原理後進行更深入的研究。
自然語言處理部分向來是筆者關注的重點,因為系統的智慧型化依賴於此。開發中文搜尋離不開中文分詞。開發任何自然語言的搜尋也離不開對相應語言的處理。對自然語言的處理其實也可以用到對Java或C語言這樣的機器語言的處理方法,只不過處理自然語言更難一點。
雖然本書的每個章節都已經用代碼強化了實現細節,但是對於初學者來說,也許需要更多的案例來理解相關技術在真實場景中的用法。案例分析部分介紹了在地理信息系統領域和戶外活動搜尋領域的套用。
本書適合需要具體實現搜尋引擎的程式設計師使用,對於信息檢索等相關研究人員也有一定的參考價值,同時獵兔搜尋技術團隊也已經開發出以本書為基礎的專門培訓課程和商業軟體。
目前搜尋引擎開發人員仍然很稀缺,作者真誠地希望通過本書把讀者帶入搜尋引擎開發的天地並認識更多的朋友。本書不是一本零基礎就可以全部掌握其內容的書,但是希望沒有相關技術基礎的讀者也可以找到自己感興趣的內容。當然,萬事開頭難,將來希望能開發出一本面向零基礎讀者的教程。
對於高級的開發人員,也可以參加獵兔的培訓或者創業團隊。職場人員經常面臨各種壓力。選擇獵兔培訓,不是幾個月學完以後就不再見面,而是給大家提供持久的支持。當以後需要再次找工作的時候,或者需要創業時,依然可以在這裡找到支持。很多商業運營的大項目失敗的代價太高,所以他們往往只招有多年開發經驗的工程師。但是為了成長就不要怕犯錯誤,在培訓時可以等學員犯了錯誤之後再告知正確答案。有經驗的工程師也可以在這裡學習到完整的技術體系。
歡迎創業合伙人或者投資合伙人和獵兔合作。獵兔提供實在的技術基礎平台,並探索切實可行的贏利方案。獵兔的早期合伙人有的已經成為當地的納稅大戶,有的項目已經找到新的合伙人加入。“敬天愛人”是共同的做事原則。所謂敬天,就是依循自然之理、人間之正道,與人為善。換言之,就是堅持正確的做人之道。所謂愛人,就是摒棄一己私慾,體恤他人,持利他之心。
感謝開源軟體開發人員和家人、關心獵兔的老師和朋友、創業夥伴以及信賴獵兔軟體的客戶多年來的支持。
編 者
目 錄
第1章 搜尋引擎總體結構 15
1.1 搜尋引擎基本模組 16
1.2 開發環境 16
1.3 搜尋引擎工作原理 18
1.3.1 網路爬蟲 18
1.3.2 全文索引結構與Lucene實現 18
1.3.3 搜尋用戶界面 21
1.3.4 計算框架 22
1.3.5 文本挖掘 23
1.4 本章小結 24
第2章 網路爬蟲的原理與套用 25
2.1 爬蟲的基本原理 26
2.2 爬蟲架構 28
2.2.1 基本架構 29
2.2.2 分散式爬蟲架構 31
2.2.3 垂直爬蟲架構 32
2.3 抓取網頁 33
2.3.1 下載網頁的基本方法 34
2.3.2 網頁更新 37
2.3.3 抓取限制應對方法 39
2.3.4 URL地址提取 41
2.3.5 抓取JavaScript動態頁面 42
2.3.6 抓取即時信息 45
2.3.7 抓取暗網 46
2.3.8 信息過濾 47
2.3.9 最好優先遍歷 52
2.4 存儲URL地址 54
2.4.1 BerkeleyDB 54
2.4.2 布隆過濾器 56
2.5 並行抓取 59
2.5.1 多執行緒爬蟲 59
2.5.2 垂直搜尋的多執行緒爬蟲 61
2.5.3 異步I/O 63
2.6 RSS抓取 66
2.7 抓取FTP 68
2.8 下載圖片 69
2.9 圖像的OCR識別 70
2.9.1 圖像二值化 71
2.9.2 切分圖像 73
2.9.3 SVM分類 76
2.10 Web結構挖掘 80
2.10.1 存儲Web圖 80
2.10.2 PageRank算法 84
2.10.3 HITs算法 91
2.10.4 主題相關的PageRank 95
2.11 部署爬蟲 96
2.12 本章小結 96
第3章 索引內容提取 100
3.1 從HTML檔案中提取文本 101
3.1.1 字元集編碼 101
3.1.2 識別網頁的編碼 104
3.1.3 網頁編碼轉換為字元串編碼 107
3.1.4 使用HTMLParser實現定向抓取 107
3.1.5 使用正則表達式提取數據 112
3.1.6 結構化信息提取 113
3.1.7 網頁的DOM結構 116
3.1.8 使用NekoHTML提取信息 118
3.1.9 網頁去噪 123
3.1.10 網頁結構相似度計算 128
3.1.11 提取標題 130
3.1.12 提取日期 131
3.2 從非HTML檔案中提取文本 131
3.2.1 提取標題的一般方法 132
3.2.2 PDF檔案 136
3.2.3 Word檔案 140
3.2.4 Rtf檔案 141
3.2.5 Excel檔案 152
3.2.6 PowerPoint檔案 155
3.3 提取垂直行業信息 155
3.3.1 醫療行業 155
3.3.2 旅遊行業 156
3.4 流媒體內容提取 157
3.4.1 音頻流內容提取 157
3.4.2 視頻流內容提取 161
3.5 存儲提取內容 162
3.6 本章小結 163
第4章 中文分詞原理與實現 165
4.1 Lucene中的中文分詞 166
4.1.1 Lucene切分原理 166
4.1.2 Lucene中的Analyzer 168
4.1.3 自己寫Analyzer 169
4.1.4 Lietu中文分詞 172
4.2 查找詞典算法 172
4.2.1 標準Trie樹 173
4.2.2 三叉Trie樹 176
4.3 中文分詞的原理 180
4.4 中文分詞流程與結構 184
4.5 形成切分詞圖 185
4.6 機率語言模型的分詞方法 191
4.7 N元分詞方法 195
4.8 新詞發現 197
4.9 未登錄詞識別 199
4.10 詞性標註 200
4.10.1 隱馬爾可夫模型 203
4.10.2 基於轉換的錯誤學習方法 211
4.11 平滑算法 213
4.12 機器學習的方法 217
4.12.1 最大熵 218
4.12.2 條件隨機場 221
4.13 有限狀態機 221
4.14 本章小結 228
第5章 讓搜尋引擎理解自然語言 230
5.1 停用詞表 231
5.2 句法分析樹 233
5.3 相似度計算 237
5.4 文檔排重 240
5.4.1 語義指紋 241
5.4.2 SimHash 244
5.4.3 分散式文檔排重 254
5.5 中文關鍵字提取 255
5.5.1 關鍵字提取的基本方法 255
5.5.2 HITS算法套用於關鍵字提取 257
5.5.3 從網頁中提取關鍵字 259
5.6 相關搜尋詞 260
5.6.1 挖掘相關搜尋詞 260
5.6.2 使用多執行緒計算相關搜尋詞 262
5.7 信息提取 263
5.8 拼寫檢查與建議 268
5.8.1 模糊匹配問題 271
5.8.2 英文拼寫檢查 274
5.8.3 中文拼寫檢查 275
5.9 自動摘要 278
5.9.1 自動摘要技術 278
5.9.2 自動摘要的設計 279
5.9.3 基於篇章結構的自動摘要 285
5.9.4 Lucene中的動態摘要 285
5.10 文本分類 288
5.10.1 特徵提取 290
5.10.2 中心向量法 294
5.10.3 樸素貝葉斯 296
5.10.4 支持向量機 305
5.10.5 多級分類 313
5.10.6 規則方法 314
5.10.7 網頁分類 317
5.11 自動聚類 318
5.11.1 聚類的定義 318
5.11.2 K均值聚類方法 318
5.11.3 K均值實現 320
5.11.4 深入理解DBScan算法 324
5.11.5 使用DBScan算法聚類實例 326
5.12 拼音轉換 328
5.13 概念搜尋 329
5.14 多語言搜尋 337
5.15 跨語言搜尋 338
5.16 情感識別 339
5.16.1 確定詞語的褒貶傾向 342
5.16.2 實現情感識別 343
5.16.3 用戶協同過濾 345
5.17 本章小結 346
第6章 Lucene原理與套用 348
6.1 Lucene深入介紹 349
6.1.1 常用查詢 349
6.1.2 查詢語法與解析 350
6.1.3 查詢原理 354
6.1.4 使用Filter篩選搜尋結果 355
6.1.5 遍歷索引庫 355
6.1.6 索引數值列 357
6.2 Lucene中的壓縮算法 360
6.2.1 變長壓縮 360
6.2.2 PForDelta 362
6.2.3 前綴壓縮 365
6.2.4 差分編碼 366
6.2.5 設計索引庫結構 368
6.3 創建和維護索引庫 369
6.3.1 創建索引庫 369
6.3.2 向索引庫中添加索引文檔 370
6.3.3 刪除索引庫中的索引文檔 373
6.3.4 更新索引庫中的索引文檔 373
6.3.5 索引的合併 374
6.3.6 索引檔案格式 374
6.3.7 分發索引 377
6.3.8 修復索引 380
6.4 查找索引庫 380
6.5 讀寫並發控制 381
6.6 最佳化使用Lucene 382
6.6.1 索引最佳化 382
6.6.2 查詢最佳化 383
6.6.3 實現時間加權排序 386
6.6.4 實現字詞混合索引 389
6.6.5 重用Tokenizer 394
6.6.6 定製Tokenizer 394
6.7 檢索模型 396
6.7.1 向量空間模型 396
6.7.2 BM25機率模型 401
6.7.3 統計語言模型 406
6.8 查詢大容量索引 408
6.9 實時搜尋 409
6.10 本章小結 410
第7章 搜尋引擎用戶界面 411
7.1 實現Lucene搜尋 412
7.2 搜尋頁面設計 413
7.2.1 Struts2實現的搜尋界面 413
7.2.2 翻頁組件 414
7.3 實現搜尋接口 415
7.3.1 編碼識別 415
7.3.2 布爾搜尋 418
7.3.3 指定範圍搜尋 419
7.3.4 搜尋結果排序 420
7.3.5 搜尋頁面的索引快取與更新 420
7.4 歷史搜尋詞記錄 423
7.5 實現關鍵字高亮顯示 424
7.6 實現分類統計視圖 426
7.7 實現相似文檔搜尋 431
7.8 實現AJAX搜尋聯想詞 433
7.8.1 估計查詢詞的文檔頻率 433
7.8.2 搜尋聯想詞總體結構 434
7.8.3 伺服器端處理 434
7.8.4 瀏覽器端處理 435
7.8.5 伺服器端改進 440
7.8.6 拼音提示 443
7.8.7 部署總結 444
7.9 集成其他功能 444
7.9.1 拼寫檢查 444
7.9.2 分類統計 445
7.9.3 相關搜尋 447
7.9.4 再次查找 450
7.9.5 搜尋日誌 450
7.10 搜尋日誌分析 452
7.10.1 日誌信息過濾 452
7.10.2 信息統計 454
7.10.3 挖掘日誌信息 456
7.11 本章小結 457
第8章 使用Solr實現企業搜尋 458
8.1 Solr簡介 459
8.2 Solr基本用法 460
8.2.1 Solr伺服器端的配置與中文支持 461
8.2.2 把數據放進Solr 466
8.2.3 刪除數據 468
8.2.4 Solr客戶端與搜尋界面 469
8.2.5 Solr索引庫的查找 471
8.2.6 索引分發 475
8.2.7 Solr搜尋最佳化 478
8.3 從FAST Search移植到Solr 481
8.4 Solr擴展與定製 482
8.4.1 Solr中字詞混合索引 483
8.4.2 相關檢索 484
8.4.3 搜尋結果去重 486
8.4.4 定製輸入/輸出 490
8.4.5 分散式搜尋 494
8.4.6 SolrJ查詢分析器 495
8.4.7 擴展SolrJ 503
8.4.8 擴展Solr 504
8.4.9 查詢Web圖 508
8.5 Solr的.NET客戶端 510
8.6 Solr的PHP客戶端 516
8.7 本章小結 519
第9章 地理信息系統案例分析 520
9.1 新聞提取 522
9.2 POI信息提取 526
9.2.1 提取主體 531
9.2.2 提取地區 533
9.2.3 指代消解 534
9.3 本章小結 536
第10章 戶外活動搜尋案例分析 537
10.1 爬蟲 538
10.2 信息提取 539
10.3 活動分類 542
10.4 搜尋 543
10.5 本章小結 544
參考資料 545