《使用C#開(kāi)發(fā)搜索引擎(第2版)》介紹如何以C#作為工具開(kāi)發(fā)智能搜索引擎系統(tǒng)。 《使用C#開(kāi)發(fā)搜索引擎(第2版)》是一本介紹業(yè)界熱門(mén)的Lucene.Net、使用WebBrowser做爬蟲(chóng)以及結(jié)合Solr/ElasticSearch開(kāi)發(fā)ASP.NET搜索的書(shū)籍。書(shū)中從網(wǎng)絡(luò)爬蟲(chóng)抓取數(shù)據(jù)開(kāi)始;然后介紹中文分詞、文本排重等文本挖掘技術(shù)和搜索結(jié)果展現(xiàn);最后介紹在線智能客服(聊天機(jī)器人)開(kāi)發(fā)框架。從C#語(yǔ)法開(kāi)始,逐漸深入,是零基礎(chǔ)實(shí)踐面向未來(lái)的智能軟件開(kāi)發(fā)的首選。 對(duì)于學(xué)習(xí)復(fù)雜數(shù)據(jù)結(jié)構(gòu)和自然語(yǔ)言處理相關(guān)應(yīng)用開(kāi)發(fā)也有參考價(jià)值。
《使用C#開(kāi)發(fā)搜索引擎(第2版)》是介紹業(yè)界熱門(mén)的Lucene.Net、使用WebBrowser做爬蟲(chóng)以及結(jié)合Solr/ElasticSearch開(kāi)發(fā)ASP.NET搜索的書(shū)籍。《使用C#開(kāi)發(fā)搜索引擎(第2版)》還介紹了在線智能客服(聊天機(jī)器人)開(kāi)發(fā)框架。從C#語(yǔ)法開(kāi)始,逐漸深入,是零基礎(chǔ)實(shí)踐面向未來(lái)的智能軟件開(kāi)發(fā)。對(duì)于學(xué)習(xí)復(fù)雜數(shù)據(jù)結(jié)構(gòu)和自然語(yǔ)言處理相關(guān)應(yīng)用開(kāi)發(fā)也有參考價(jià)值。
羅剛,計(jì)算機(jī)軟件碩士,畢業(yè)于吉林工業(yè)大學(xué)。2005年創(chuàng)立北京盈智星科技發(fā)展有限公司,2008年聯(lián)合創(chuàng)立上海數(shù)聚軟件公司。獵兔搜索創(chuàng)始人,當(dāng)前獵兔搜索在北京和上海以及石家莊均設(shè)有研發(fā)部。帶領(lǐng)獵兔搜索技術(shù)開(kāi)發(fā)團(tuán)隊(duì)先后開(kāi)發(fā)出獵兔中文分詞系統(tǒng)、獵兔文本挖掘系統(tǒng),智能垂直搜索系統(tǒng)以及網(wǎng)絡(luò)信息監(jiān)測(cè)系統(tǒng)等,實(shí)現(xiàn)互聯(lián)網(wǎng)信息的采集、過(guò)濾、搜索和實(shí)時(shí)監(jiān)測(cè),其開(kāi)發(fā)的搜索軟件日用戶訪問(wèn)量達(dá)萬(wàn)次以上。
第1章 使用C#開(kāi)發(fā)搜索引擎
快速入門(mén) 1
1.1 各種搜索引擎 2
1.1.1 通用搜索 3
1.1.2 垂直搜索 3
1.1.3 站內(nèi)搜索 4
1.2 搜索引擎的整體結(jié)構(gòu) 4
1.3 搜索引擎的基本技術(shù) 5
1.3.1 網(wǎng)絡(luò)爬蟲(chóng) 5
1.3.2 文本挖掘 5
1.3.3 全文索引 6
1.3.4 搜索語(yǔ)法介紹 8
1.3.5 搜索用戶界面 8
1.4 C#開(kāi)發(fā)快速入門(mén) 9
1.4.1 準(zhǔn)備開(kāi)發(fā)環(huán)境 9
1.4.2 基本語(yǔ)法 9
1.4.3 多維數(shù)組 11
1.4.4 位運(yùn)算 11
1.4.5 枚舉類(lèi)型 12
1.4.6 面向?qū)ο?13
1.4.7 字符串 15
1.4.8 讀寫(xiě)文件 16
1.4.9 集合類(lèi) 17
1.4.10 泛型 20
1.4.11 委托和事件 21
1.4.12 lambda表達(dá)式 24
1.4.13 單元測(cè)試 24
1.4.14 擴(kuò)展方法 25
1.4.15 類(lèi)庫(kù) 26
1.5 算法基礎(chǔ) 26
1.5.1 雙端隊(duì)列 27
1.5.2 散列表 31
1.5.3 單鏈表 36
1.5.4 標(biāo)準(zhǔn)Trie樹(shù) 37
1.5.5 二叉搜索樹(shù) 39
1.5.6 三叉Trie樹(shù) 41
1.5.7 平衡Trie樹(shù) 46
1.6 本章小結(jié) 48
1.7 術(shù)語(yǔ)表 48
第2章 使用C#開(kāi)發(fā)網(wǎng)絡(luò)爬蟲(chóng) 51
2.1 網(wǎng)絡(luò)爬蟲(chóng)抓取原理 52
2.2 爬蟲(chóng)架構(gòu) 54
2.2.1 基本架構(gòu) 54
2.2.2 分布式爬蟲(chóng)架構(gòu) 56
2.2.3 垂直爬蟲(chóng)架構(gòu) 57
2.3 下載網(wǎng)頁(yè) 58
2.3.1 HTTP協(xié)議 58
2.3.2 下載靜態(tài)網(wǎng)頁(yè) 61
2.3.3 下載動(dòng)態(tài)網(wǎng)頁(yè) 65
2.4 線程池 73
2.5 網(wǎng)絡(luò)爬蟲(chóng)的遍歷與實(shí)現(xiàn) 75
2.6 網(wǎng)站地圖 77
2.7 連接池 78
2.8 URL地址查新 79
2.8.1 嵌入式數(shù)據(jù)庫(kù) 79
2.8.2 布隆過(guò)濾器 82
2.9 抓取RSS 84
2.10 解析相對(duì)地址 86
2.11 網(wǎng)頁(yè)更新 86
2.12 信息過(guò)濾 89
2.13 垂直行業(yè)抓取 94
2.14 抓取限制應(yīng)對(duì)方法 94
2.14.1 更換IP地址 94
2.14.2 抓取需要登錄的網(wǎng)頁(yè) 98
2.14.3 抓取ASP.net網(wǎng)頁(yè) 100
2.15 保存信息 103
2.15.1 存入數(shù)據(jù)庫(kù) 103
2.15.2 存成圖像 104
2.16 日志 105
2.17 本章小結(jié) 108
2.18 術(shù)語(yǔ)表 108
第3章 索引各種格式文檔 113
3.1 從HTML文件中提取信息 114
3.1.1 識(shí)別網(wǎng)頁(yè)的編碼 114
3.1.2 正則表達(dá)式 116
3.1.3 Html Agility Pack介紹 120
3.1.4 NSoup介紹 124
3.1.5 網(wǎng)頁(yè)正文提取 124
3.1.6 結(jié)構(gòu)化信息提取 137
3.1.7 查看網(wǎng)頁(yè)的DOM結(jié)構(gòu) 140
3.1.8 網(wǎng)頁(yè)結(jié)構(gòu)相似度計(jì)算 141
3.2 從非HTML文件中提取文本 143
3.2.1 TEXT文件 144
3.2.2 PDF文件 144
3.2.3 Office文件 146
3.2.4 Rtf文件 147
3.3 OCR 148
3.3.1 字形識(shí)別 149
3.3.2 圖像二值化 149
3.4 本章小結(jié) 153
3.5 術(shù)語(yǔ)表 154
第4章 自然語(yǔ)言處理 155
4.1 統(tǒng)計(jì)機(jī)器學(xué)習(xí) 156
4.2 協(xié)同推薦 157
4.3 文檔排重 163
4.3.1 生成SimHash 164
4.3.2 查找SimHash 166
4.3.3 用于短文本排重 170
4.4 中文關(guān)鍵詞提取 170
4.4.1 關(guān)鍵詞提取的基本方法 171
4.4.2 從網(wǎng)頁(yè)中提取關(guān)鍵詞 174
4.5 相關(guān)搜索 174
4.6 拼寫(xiě)檢查 175
4.6.1 拼寫(xiě)檢查的概率模型 176
4.6.2 模糊匹配問(wèn)題 176
4.6.3 英文拼寫(xiě)檢查 180
4.6.4 中文拼寫(xiě)檢查 183
4.7 文本摘要 184
4.7.1 文本摘要的設(shè)計(jì) 184
4.7.2 實(shí)現(xiàn)文本摘要技術(shù) 185
4.7.3 Lucene.net中的動(dòng)態(tài)摘要 190
4.8 文本分類(lèi) 191
4.8.1 自動(dòng)分類(lèi)的接口定義 191
4.8.2 自動(dòng)分類(lèi)的實(shí)現(xiàn) 191
4.9 自動(dòng)聚類(lèi) 197
4.9.1 文檔相似度 197
4.9.2 K均值聚類(lèi)方法 201
4.9.3 K均值實(shí)現(xiàn) 202
4.10 拼音轉(zhuǎn)換 204
4.11 句法分析樹(shù) 204
4.12 信息提取 211
4.12.1 信息提取的規(guī)則及其實(shí)現(xiàn) 211
4.12.2 提取地域信息 219
4.13 本章小結(jié) 221
4.14 術(shù)語(yǔ)表 221
第5章 用C#實(shí)現(xiàn)中文分詞 223
5.1 詞 224
5.2 文本切分的基本方法 224
5.3 地名切分 226
5.3.1 地址類(lèi)型標(biāo)注 227
5.3.2 未登錄詞識(shí)別 227
5.4 有限狀態(tài)機(jī) 229
5.5 查找詞典算法 231
5.6 中文分詞的原理 232
5.6.1 正向最大長(zhǎng)度匹配法 232
5.6.2 逆向最大長(zhǎng)度匹配法 236
5.6.3 處理未登錄串 240
5.7 中文分詞的流程與結(jié)構(gòu) 241
5.8 切分詞圖 243
5.8.1 保存切分詞圖 243
5.8.2 生成全切分詞圖 247
5.9 概率語(yǔ)言模型的分詞方法 250
5.9.1 準(zhǔn)備數(shù)據(jù) 251
5.9.2 一元模型 252
5.9.3 N元模型 257
5.10 最大熵 262
5.11 未登錄詞識(shí)別 264
5.12 詞性標(biāo)注 264
5.12.1 隱馬爾科夫模型 266
5.12.2 實(shí)現(xiàn)詞性標(biāo)注 271
5.13 本章小結(jié) 275
5.14 術(shù)語(yǔ)表 276
第6章 Lucene.net原理與應(yīng)用 277
6.1 Lucene.net快速入門(mén) 278
6.1.1 索引文檔 278
6.1.2 搜索文檔 280
6.1.3 Lucene.net結(jié)構(gòu) 281
6.2 Lucene.net深入介紹 282
6.2.1 索引原理 282
6.2.2 分析文本 285
6.2.3 遍歷索引庫(kù) 288
6.2.4 布爾查詢(xún)?cè)?289
6.2.5 檢索模型 290
6.2.6 收集最相關(guān)的文檔 291
6.3 索引中的壓縮算法 296
6.3.1 變長(zhǎng)壓縮 296
6.3.2 差分編碼 298
6.4 創(chuàng)建和維護(hù)索引庫(kù) 299
6.4.1 設(shè)計(jì)一個(gè)簡(jiǎn)單的索引庫(kù) 299
6.4.2 創(chuàng)建索引庫(kù) 300
6.4.3 向索引庫(kù)中添加索引文檔 301
6.4.4 刪除索引庫(kù)中的索引文檔 303
6.4.5 更新索引庫(kù)中的索引文檔 304
6.4.6 索引的優(yōu)化與合并 304
6.5 查找索引庫(kù) 305
6.5.1 布爾查詢(xún) 306
6.5.2 同時(shí)查詢(xún)多列 307
6.5.3 跨度查詢(xún) 308
6.5.4 通配符查詢(xún) 312
6.5.5 過(guò)濾 312
6.5.6 按指定列排序 313
6.5.7 查詢(xún)大容量索引 318
6.5.8 函數(shù)查詢(xún) 320
6.5.9 定制相似度 323
6.5.10 評(píng)價(jià)搜索結(jié)果 325
6.6 中文信息檢索 325
6.6.1 Lucene.net中的中文處理 326
6.6.2 Lietu中文分詞的使用 326
6.6.3 定制Tokenizer 328
6.6.4 解析查詢(xún)串 329
6.6.5 實(shí)現(xiàn)字詞混合索引 333
6.7 抓取數(shù)據(jù)庫(kù)中的內(nèi)容 336
6.7.1 讀取數(shù)據(jù) 337
6.7.2 數(shù)據(jù)同步 338
6.8 與爬蟲(chóng)集成 338
6.9 概念搜索 341
6.10 本章小結(jié) 344
6.11 術(shù)語(yǔ)表 345
第7章 實(shí)現(xiàn)搜索用戶界面 347
7.1 搜索頁(yè)面設(shè)計(jì) 348
7.1.1 用于顯示搜索結(jié)果的
ASP.net 348
7.1.2 搜索結(jié)果條 351
7.1.3 搜索結(jié)果分頁(yè) 351
7.1.4 設(shè)計(jì)一個(gè)簡(jiǎn)單的搜索頁(yè)面 352
7.2 實(shí)現(xiàn)搜索接口 353
7.2.1 Lucene.net搜索接口 353
7.2.2 指定范圍搜索 357
7.2.3 搜索頁(yè)面的索引緩存與
更新 358
7.3 實(shí)現(xiàn)關(guān)鍵詞高亮顯示 361
7.4 實(shí)現(xiàn)分類(lèi)統(tǒng)計(jì)視圖 362
7.4.1 搜索結(jié)果分類(lèi)統(tǒng)計(jì)與導(dǎo)航 363
7.4.2 層次樹(shù) 366
7.5 相關(guān)搜索詞 368
7.6 實(shí)現(xiàn)AJax自動(dòng)完成 369
7.6.1 總體結(jié)構(gòu) 370
7.6.2 服務(wù)器端處理 371
7.6.3 瀏覽器端處理 372
7.7 集成其他功能 374
7.7.1 拼寫(xiě)檢查 374
7.7.2 再次查找 374
7.7.3 黑名單 375
7.7.4 搜索日志 376
7.8 本章小結(jié) 377
第8章 使用Solr開(kāi)發(fā)網(wǎng)站搜索 379
8.1 搜索服務(wù)器端 380
8.1.1 Solr的結(jié)構(gòu) 380
8.1.2 啟動(dòng)Solr服務(wù)器 381
8.1.3 開(kāi)發(fā)支持Solr的中文分詞 384
8.1.4 中文的Solr 385
8.1.5 索引數(shù)據(jù) 388
8.1.6 查詢(xún)功能 389
8.1.7 高亮顯示 392
8.2 Solr的.NET客戶端 393
8.2.1 使用Solrnet 393
8.2.2 查詢(xún) 396
8.2.3 分類(lèi)統(tǒng)計(jì) 397
8.2.4 ASP.NET中使用Solrnet 401
8.2.5 刪除數(shù)據(jù) 405
8.2.6 從數(shù)據(jù)庫(kù)索引數(shù)據(jù) 405
8.2.7 翻頁(yè) 408
8.2.8 實(shí)現(xiàn)多分類(lèi) 411
8.3 查詢(xún)語(yǔ)法 412
8.3.1 對(duì)空格的支持 413
8.3.2 日期加權(quán) 413
8.4 索引分布 415
8.5 本章小結(jié) 417
第9章 Elasticsearch開(kāi)發(fā)分
布式搜索 419
9.1 搜索集群 421
9.2 安裝 422
9.3 ES的.net客戶端 429
9.3.1 連接搜索服務(wù)器 429
9.3.2 創(chuàng)建索引 430
9.3.3 插入數(shù)據(jù) 431
9.4 查詢(xún) 432
9.4.1 布爾查詢(xún) 433
9.4.2 嵌套類(lèi)型和嵌套查詢(xún) 434
9.4.3 查詢(xún)結(jié)果 437
9.4.4 過(guò)濾器 437
9.5 高亮顯示 437
9.6 分頁(yè) 442
9.7 本章小結(jié) 442
第10章 在線客服案例分析 445
10.1 使用WebSocket 446
10.2 知識(shí)庫(kù) 447
10.3 自動(dòng)問(wèn)答 449
10.4 本章小結(jié) 453
參考資源 455