基本介紹
內容簡介,目錄,
內容簡介
本書主要包括總體介紹部分、爬虫部分、自然語言處理部分、全文檢索部分以及相關案例分析。爬虫部分介紹了網頁遍歷方法和如何實現增量抓取,並介紹了從網頁等各種格式的文檔中提取主要內容的方法。自然語言處理部分從統計機器學習的原理出發,包括了中文分詞與詞性標註的理論與實現以及在搜尋引擎中的實用等細節,同時對文檔排重、文本分類、自動聚類、句法分析樹、拼寫檢查等自然語言處理領域的經典問題進行了深入淺出的介紹並總結了實現方法。在全文檢索部分,結合Lucene3.0介紹了搜尋引擎的原理與進展。用簡單的例子介紹了Lucene的最新套用方法。包括完整的搜尋實現過程:從完成索引到搜尋用戶界面的實現。本書還進一步介紹了實現準實時搜尋的方法,展示了Solr 1.4版本的用法以及實現分散式搜尋服務集群的方法。最後介紹了在地理信息系統領域和戶外活動搜尋領域的套用。
本書是獵兔搜尋開發團隊的軟體研發和教學實踐的經驗匯總。 本書總結搜尋引擎相關理論與實際解決方案,並給出了Java實現,其中利用了流行的開源項目Lucene和Solr,而且還包括原創的實現。
目錄
第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