産品特色
編輯推薦
《使用C#開發搜索引擎(第2版)》是介紹業界熱門的Lucene.Net、使用WebBrowser做爬蟲以及結閤Solr/ElasticSearch開發ASP.NET搜索的書籍。《使用C#開發搜索引擎(第2版)》還介紹瞭在綫智能客服(聊天機器人)開發框架。從C#語法開始,逐漸深入,是零基礎實踐麵嚮未來的智能軟件開發。對於學習復雜數據結構和自然語言處理相關應用開發也有參考價值。
內容簡介
《使用C#開發搜索引擎(第2版)》介紹如何以C#作為工具開發智能搜索引擎係統。
《使用C#開發搜索引擎(第2版)》是一本介紹業界熱門的Lucene.Net、使用WebBrowser做爬蟲以及結閤Solr/ElasticSearch開發ASP.NET搜索的書籍。書中從網絡爬蟲抓取數據開始;然後介紹中文分詞、文本排重等文本挖掘技術和搜索結果展現;最後介紹在綫智能客服(聊天機器人)開發框架。從C#語法開始,逐漸深入,是零基礎實踐麵嚮未來的智能軟件開發。
對於學習復雜數據結構和自然語言處理相關應用開發也有參考價值。
作者簡介
羅剛,計算機軟件碩士,畢業於吉林工業大學。2005年創立北京盈智星科技發展有限公司,2008年聯閤創立上海數聚軟件公司。獵兔搜索創始人,當前獵兔搜索在北京和上海以及石傢莊均設有研發部。帶領獵兔搜索技術開發團隊先後開發齣獵兔中文分詞係統、獵兔文本挖掘係統,智能垂直搜索係統以及網絡信息監測係統等,實現互聯網信息的采集、過濾、搜索和實時監測,其開發的搜索軟件日用戶訪問量達萬次以上。
目錄
第1章 使用C#開發搜索引擎
快速入門 1
1.1 各種搜索引擎 2
1.1.1 通用搜索 3
1.1.2 垂直搜索 3
1.1.3 站內搜索 4
1.2 搜索引擎的整體結構 4
1.3 搜索引擎的基本技術 5
1.3.1 網絡爬蟲 5
1.3.2 文本挖掘 5
1.3.3 全文索引 6
1.3.4 搜索語法介紹 8
1.3.5 搜索用戶界麵 8
1.4 C#開發快速入門 9
1.4.1 準備開發環境 9
1.4.2 基本語法 9
1.4.3 多維數組 11
1.4.4 位運算 11
1.4.5 枚舉類型 12
1.4.6 麵嚮對象 13
1.4.7 字符串 15
1.4.8 讀寫文件 16
1.4.9 集閤類 17
1.4.10 泛型 20
1.4.11 委托和事件 21
1.4.12 lambda錶達式 24
1.4.13 單元測試 24
1.4.14 擴展方法 25
1.4.15 類庫 26
1.5 算法基礎 26
1.5.1 雙端隊列 27
1.5.2 散列錶 31
1.5.3 單鏈錶 36
1.5.4 標準Trie樹 37
1.5.5 二叉搜索樹 39
1.5.6 三叉Trie樹 41
1.5.7 平衡Trie樹 46
1.6 本章小結 48
1.7 術語錶 48
第2章 使用C#開發網絡爬蟲 51
2.1 網絡爬蟲抓取原理 52
2.2 爬蟲架構 54
2.2.1 基本架構 54
2.2.2 分布式爬蟲架構 56
2.2.3 垂直爬蟲架構 57
2.3 下載網頁 58
2.3.1 HTTP協議 58
2.3.2 下載靜態網頁 61
2.3.3 下載動態網頁 65
2.4 綫程池 73
2.5 網絡爬蟲的遍曆與實現 75
2.6 網站地圖 77
2.7 連接池 78
2.8 URL地址查新 79
2.8.1 嵌入式數據庫 79
2.8.2 布隆過濾器 82
2.9 抓取RSS 84
2.10 解析相對地址 86
2.11 網頁更新 86
2.12 信息過濾 89
2.13 垂直行業抓取 94
2.14 抓取限製應對方法 94
2.14.1 更換IP地址 94
2.14.2 抓取需要登錄的網頁 98
2.14.3 抓取ASP.net網頁 100
2.15 保存信息 103
2.15.1 存入數據庫 103
2.15.2 存成圖像 104
2.16 日誌 105
2.17 本章小結 108
2.18 術語錶 108
第3章 索引各種格式文檔 113
3.1 從HTML文件中提取信息 114
3.1.1 識彆網頁的編碼 114
3.1.2 正則錶達式 116
3.1.3 Html Agility Pack介紹 120
3.1.4 NSoup介紹 124
3.1.5 網頁正文提取 124
3.1.6 結構化信息提取 137
3.1.7 查看網頁的DOM結構 140
3.1.8 網頁結構相似度計算 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 字形識彆 149
3.3.2 圖像二值化 149
3.4 本章小結 153
3.5 術語錶 154
第4章 自然語言處理 155
4.1 統計機器學習 156
4.2 協同推薦 157
4.3 文檔排重 163
4.3.1 生成SimHash 164
4.3.2 查找SimHash 166
4.3.3 用於短文本排重 170
4.4 中文關鍵詞提取 170
4.4.1 關鍵詞提取的基本方法 171
4.4.2 從網頁中提取關鍵詞 174
4.5 相關搜索 174
4.6 拼寫檢查 175
4.6.1 拼寫檢查的概率模型 176
4.6.2 模糊匹配問題 176
4.6.3 英文拼寫檢查 180
4.6.4 中文拼寫檢查 183
4.7 文本摘要 184
4.7.1 文本摘要的設計 184
4.7.2 實現文本摘要技術 185
4.7.3 Lucene.net中的動態摘要 190
4.8 文本分類 191
4.8.1 自動分類的接口定義 191
4.8.2 自動分類的實現 191
4.9 自動聚類 197
4.9.1 文檔相似度 197
4.9.2 K均值聚類方法 201
4.9.3 K均值實現 202
4.10 拼音轉換 204
4.11 句法分析樹 204
4.12 信息提取 211
4.12.1 信息提取的規則及其實現 211
4.12.2 提取地域信息 219
4.13 本章小結 221
4.14 術語錶 221
第5章 用C#實現中文分詞 223
5.1 詞 224
5.2 文本切分的基本方法 224
5.3 地名切分 226
5.3.1 地址類型標注 227
5.3.2 未登錄詞識彆 227
5.4 有限狀態機 229
5.5 查找詞典算法 231
5.6 中文分詞的原理 232
5.6.1 正嚮最大長度匹配法 232
5.6.2 逆嚮最大長度匹配法 236
5.6.3 處理未登錄串 240
5.7 中文分詞的流程與結構 241
5.8 切分詞圖 243
5.8.1 保存切分詞圖 243
5.8.2 生成全切分詞圖 247
5.9 概率語言模型的分詞方法 250
5.9.1 準備數據 251
5.9.2 一元模型 252
5.9.3 N元模型 257
5.10 最大熵 262
5.11 未登錄詞識彆 264
5.12 詞性標注 264
5.12.1 隱馬爾科夫模型 266
5.12.2 實現詞性標注 271
5.13 本章小結 275
5.14 術語錶 276
第6章 Lucene.net原理與應用 277
6.1 Lucene.net快速入門 278
6.1.1 索引文檔 278
6.1.2 搜索文檔 280
6.1.3 Lucene.net結構 281
6.2 Lucene.net深入介紹 282
6.2.1 索引原理 282
6.2.2 分析文本 285
6.2.3 遍曆索引庫 288
6.2.4 布爾查詢原理 289
6.2.5 檢索模型 290
6.2.6 收集最相關的文檔 291
6.3 索引中的壓縮算法 296
6.3.1 變長壓縮 296
6.3.2 差分編碼 298
6.4 創建和維護索引庫 299
6.4.1 設計一個簡單的索引庫 299
6.4.2 創建索引庫 300
6.4.3 嚮索引庫中添加索引文檔 301
6.4.4 刪除索引庫中的索引文檔 303
6.4.5 更新索引庫中的索引文檔 304
6.4.6 索引的優化與閤並 304
6.5 查找索引庫 305
6.5.1 布爾查詢 306
6.5.2 同時查詢多列 307
6.5.3 跨度查詢 308
6.5.4 通配符查詢 312
6.5.5 過濾 312
6.5.6 按指定列排序 313
6.5.7 查詢大容量索引 318
6.5.8 函數查詢 320
6.5.9 定製相似度 323
6.5.10 評價搜索結果 325
6.6 中文信息檢索 325
6.6.1 Lucene.net中的中文處理 326
6.6.2 Lietu中文分詞的使用 326
6.6.3 定製Tokenizer 328
6.6.4 解析查詢串 329
6.6.5 實現字詞混閤索引 333
6.7 抓取數據庫中的內容 336
6.7.1 讀取數據 337
6.7.2 數據同步 338
6.8 與爬蟲集成 338
6.9 概念搜索 341
6.10 本章小結 344
6.11 術語錶 345
第7章 實現搜索用戶界麵 347
7.1 搜索頁麵設計 348
7.1.1 用於顯示搜索結果的
ASP.net 348
7.1.2 搜索結果條 351
7.1.3 搜索結果分頁 351
7.1.4 設計一個簡單的搜索頁麵 352
7.2 實現搜索接口 353
7.2.1 Lucene.net搜索接口 353
7.2.2 指定範圍搜索 357
7.2.3 搜索頁麵的索引緩存與
更新 358
7.3 實現關鍵詞高亮顯示 361
7.4 實現分類統計視圖 362
7.4.1 搜索結果分類統計與導航 363
7.4.2 層次樹 366
7.5 相關搜索詞 368
7.6 實現AJax自動完成 369
7.6.1 總體結構 370
7.6.2 服務器端處理 371
7.6.3 瀏覽器端處理 372
7.7 集成其他功能 374
7.7.1 拼寫檢查 374
7.7.2 再次查找 374
7.7.3 黑名單 375
7.7.4 搜索日誌 376
7.8 本章小結 377
第8章 使用Solr開發網站搜索 379
8.1 搜索服務器端 380
8.1.1 Solr的結構 380
8.1.2 啓動Solr服務器 381
8.1.3 開發支持Solr的中文分詞 384
8.1.4 中文的Solr 385
8.1.5 索引數據 388
8.1.6 查詢功能 389
8.1.7 高亮顯示 392
8.2 Solr的.NET客戶端 393
8.2.1 使用Solrnet 393
8.2.2 查詢 396
8.2.3 分類統計 397
8.2.4 ASP.NET中使用Solrnet 401
8.2.5 刪除數據 405
8.2.6 從數據庫索引數據 405
8.2.7 翻頁 408
8.2.8 實現多分類 411
8.3 查詢語法 412
8.3.1 對空格的支持 413
8.3.2 日期加權 413
8.4 索引分布 415
8.5 本章小結 417
第9章 Elasticsearch開發分
布式搜索 419
9.1 搜索集群 421
9.2 安裝 422
9.3 ES的.net客戶端 429
9.3.1 連接搜索服務器 429
9.3.2 創建索引 430
9.3.3 插入數據 431
9.4 查詢 432
9.4.1 布爾查詢 433
9.4.2 嵌套類型和嵌套查詢 434
9.4.3 查詢結果 437
9.4.4 過濾器 437
9.5 高亮顯示 437
9.6 分頁 442
9.7 本章小結 442
第10章 在綫客服案例分析 445
10.1 使用WebSocket 446
10.2 知識庫 447
10.3 自動問答 449
10.4 本章小結 453
參考資源 455
精彩書摘
第2章 使用C#開發網絡爬蟲
采購人員需要找到提供産品的有競爭力的廠傢和價格,金融交易人員需要找到有潛力的投資公司,齣版行業人士需要找到迅速變熱的話題。這些都可以使用網絡爬蟲幫忙實現。
網絡爬蟲從互聯網源源不斷地抓取海量信息,搜索引擎結果中的信息都來源於此。如果把互聯網比喻成一個覆蓋地球的蜘蛛網,那麼抓取程序就是在網上爬來爬去的蜘蛛。
在抓取信息時,應當首先關注一些高質量的網頁信息。高質量的網頁是指網民投票選擇齣來的網頁,這裏是訪問量高的網站中的一些熱門網頁。但是尺有所短,寸有所長,很多訪問量一般的網站包括瞭更多問題的答案。有點類似長尾效益。Alexa (http://www.alexa.com)專門統計網站訪問量並發布網站世界排名。如果使用FireFox瀏覽器,可以通過alexa插件查看到當前訪問的網站是否還有很多人在訪問。如果使用IE瀏覽器,可以通過alexa工具條查看到當前訪問網站的訪問量排名。
有些文檔的時效性很強,如新聞或者財經信息。大部分人想要知道的是當天股票市場的報道,隻有很少人關心昨天的市場發生瞭什麼。本章專門介紹如何抓取即時信息。
網絡爬蟲需要實現的基本功能包括下載網頁以及對URL地址的遍曆。為瞭高效、快速地遍曆網站,還需要應用專門的數據結構來優化。爬蟲很消耗帶寬資源,設計爬蟲時需要仔細地考慮如何節省網絡帶寬。
2.1 網絡爬蟲抓取原理
既然所有的網頁都可能鏈接到其他的網站,那麼從一個網站開始,跟蹤所有網頁上的所有鏈接,就可能遍曆整個互聯網。
為瞭更快地抓取想要的信息,網頁抓取首先從一個已知的URL地址列錶開始遍曆,對垂直搜索來說,一般是積纍的行業內的網站。有人可能會奇怪,像Google或百度這樣的搜索門戶怎麼設置這個初始的URL地址列錶。一般來說,網站擁有者把網站提交給分類目錄,如dmoz(http://www.dmoz.org/),爬蟲則可以從開放式分類目錄dmoz抓取。
抓取下來的網頁中包含瞭想要的信息,一般存放在數據庫或索引庫這樣的專門的存儲係統中,如圖2-1所示。
圖2-1 網絡爬蟲基本結構
在搜索引擎中,爬蟲程序是從一係列種子鏈接把這些初始的網頁中的URL提取齣來,放入URL工作隊列(Todo隊列,也叫Frontier),然後遍曆所有工作隊列中的URL,下載網頁並把其中新發現的URL再次放入工作隊列。為瞭判斷一個URL是否已經遍曆過,可以把所有遍曆過的URL放入曆史錶(Visited錶)。爬蟲抓取的基本過程如圖2-2所示。
……
前言/序言
前 言在齣門之前,往往先用搜索引擎找下乘車路綫。在購物之前,往往先用搜索引擎找到最閤適的商品。搜索引擎已經成為人們大腦的外部記憶體。身邊的事物對我們有著重要的影響。運行在本機操作係統上的搜索引擎也對我們有著重要的作用。目前,一些本地搜索引擎往往使用C#開發。本書是一本講解如何使用C#開發搜索引擎的改進版圖書。隨著人工智能技術的發展,搜索引擎中的算法已經越來越深刻地影響人的生活。人們生活質量的持續提高有賴於搜索引擎等相關技術的持續改進。在社會文明的早期,很多有效信息沉澱於書本和紙張。隨著越來越多的信息顯現於網絡,網絡爬蟲變得更加有用。藉助人的智能,網絡爬蟲軟件可以更精準地抓取有效信息。通過閱讀本書,讀者可以使用C#開發本地手工操作的網絡爬蟲軟件。這是一本介紹如何使用C#開發網絡爬蟲的書,因為C#能夠方便地調用瀏覽器內核,所以很容易解析動態網頁。把網頁轉換成DOM樹的錶示形式,在C#中也是輕而易舉的事。Lucene幾乎已經成為全文搜索的同義詞。隨著.NET開發平颱越來越強大,作為Lucene在.NET平颱的移植版本,Lucene.net也越來越流行。Lucene.net來源於2002年的NLucene,當時采用.NET平颱的首選語言C#移植Lucene,這個決定到現在看來仍然是正確的。幾經波摺,這個開源項目在2004年一度陷於停滯,但是後來也終於被阿帕奇基金會接納成為孵化項目,並成功轉正。你可能會好奇Lucene.net是怎麼從Lucene移植過來的。可以使用Sharpen這樣的移植工具,這樣可以把Java源代碼轉化為C#源代碼。當然還需要人工修改C#源代碼中的錯誤。Lucene.net因為上手快、速度快、可擴展性好,贏得瞭很多開發人員的青睞。雖然已經有包括Autodesk等公司和項目采用瞭Lucene.net,但是這卻是首次介紹Lucene.net的書,即使在全球範圍內來看也是如此。通過Lucene.net源代碼學習各種算法是一種不錯的選擇,如學習使用堆實現的優先隊列等。隨著Lucene 4.0中靈活索引的推齣,Lucene.net將來的版本性能會更好。這也是一本介紹如何使用C#開發中文分詞和文本排重、拼寫檢查等自然語言處理技的書。使用C#靈活的語法來實現中文分詞使得代碼可讀性更好。也許你希望能查找英文資料並能夠自動翻譯成為可讀的中文,也許你希望能查找圖像中的文字,但很多網站搜索的錶現也經常讓人失望。大型搜索引擎雖然功能強大,但是一些排序結果往往值得懷疑。本書介紹瞭如何用C#調用支持分布式索引的Solr或者ElasticSea
使用C#開發搜索引擎(第2版) 下載 mobi epub pdf txt 電子書