使用C#開發搜索引擎 ( 簡體 字) |
作者:羅剛 | 類別:1. -> 程式設計 -> .NET -> C# 2. -> 程式設計 -> 搜索引擎 |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 32035 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:12/20/2011 |
頁數:344 |
光碟數:1 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787302270706 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:
如果有計算機或者手機,在尋找解決問題的方法時,我們往往用搜索引擎尋找答案。在出門之前,我們往往先用搜索引擎查找乘車路線。在購物之前,往往先用搜索引擎找到最低的價格。搜索引擎已經成為大腦的外部記憶體。而宅男腐女們也更加依賴搜索引擎等計算機工具。 但這些也許仍然不夠,也許你覺得語音輸入搜索識別率準確率仍然有待提高。也許你希望能查找英文資料并能夠自動翻譯成為可讀的中文資料。也許你希望能查找圖像中的文字。很多網站搜索的表現也經常讓人失望。大型搜索引擎雖然功能強大,但是為什么不能把搜索結果按時間排序?搜索引擎還有很多需要改進的地方,所以出現了越來越多的搜索引擎相關的開發崗位。這些崗位相對來說,一般都是高薪。 這本書不僅僅適合專業軟件開發人員,希望學習搜索引擎工作原理的人也可以閱讀。有很多人說,不是我不愿意,是我學不會技術。也許你需要一本更好的書,或者一位更好的老師。根據生活中的場景明白折半查找其實就是猜價格的游戲。有限狀態機其實就是電話銀行中繳費之前讓人暈的一串數字輸入。總之,學習技術,不僅僅很有用,還有可能比較有趣。 介紹搜索引擎原理及具體開發實現的書已經有幾本,包括筆者出版的幾本。但大部分是使用Java實現。C#在國內很流行,但卻沒有使用C#開發搜索引擎的書籍。這本書就是為了填補這個空白。雖然使用.Net總有一種寄人籬下的感覺,但是畢竟還有Mono這樣的開源替代品。甚至已經有基于Mono開發的桌面搜索軟件Beagle。 這本書從需要用到的基本C#語法開始介紹,然后再介紹如何使用它開發搜索引擎應用。C#語法已經越來越復雜,但這里只選取最需要的一部分。學以致用是這本書的寫作原則。 Lucene幾乎已經成為全文搜索的同義詞。隨著.Net開發平臺越來越強大,作為Lucene在.Net平臺的移植版本,Lucene.Net也越來越流行。Lucene.Net來源于2002年的NLucene,當時采用.Net平臺的首選語言C#移植Lucene,這個決定到現在看來仍然是正確的。但后來幾經波折,這個開源項目在2004年一度陷于停滯,但是現在也終于被阿帕奇基金會接納成為孵化項目,有望修成正果。 可能有人會好奇Lucene.Net是怎么從Lucene移植過來的。可以使用Sharpen這樣的移植工具,這樣可以把Java源代碼轉化為C#源代碼。當然還需要人工修改C#源代碼中的錯誤。雖然已經有包括Autodesk等公司和項目采用了Lucene.Net,但是本書卻是第一本介紹Lucene.Net的書,即使在全球范圍內來看,也是如此。雖然這件好事來得晚了一些,但是該發生的終于還是發生了。 Lucene.Net因為上手快,速度快,可擴展性好,贏得了很多開發人員的青睞。很多以前使用SQL Server全文搜索的開發人員轉而使用Lucene.Net。雖然Lucene.Net一般運行于Windows服務器,但是把它部署在Linux機器亦無不可。 通過Lucene.Net源代碼學習各種算法也是一種不錯的選擇。例如學習使用堆實現的優先隊列等。隨著Lucene 4.0中靈活索引的推出,Lucene.Net將來的版本性能會更好。 這也是第一本介紹如何使用C#開發中文分詞和文本排序、拼寫檢查等自然語言處理技術的書。使用C#靈活的語法來實現中文分詞使得代碼可讀性更好。 這也是第一本介紹如何使用C#開發網絡爬蟲的書,因為C#能夠方便地調用瀏覽器內核,所以很容易解析動態網頁。把網頁轉換成DOM樹的表示形式,在C#中也是輕而易舉。 如果擔心Lucene.Net功能仍然不夠,可以使用支持分布式索引的Solr。因為Solr有Web管理界面,所以可以在安裝Solr之前就登錄到Solr的管理界面使用它。Solr的.Net客戶端接口也是精心設計的。在某些已經采用.Net作為開發前端的大型網站中,采用這樣的站內搜索將是絕配。 本書配套的光盤中提供了相關的源代碼,有的來源于獵兔搜索多年的開發經驗積累,有的是經典算法實現。其中很多都可以直接用于項目實踐。 這本書從選題到出版已經過去了兩年多時間,如果沒有這本書,也許至少還要再等幾年,才能出現一本內容類似的書。對于筆者推出的第一本介紹搜索引擎開發的書,有的讀者有相見恨晚的感覺。希望這本書也能帶給C語言開發人員一些新的想法。 對于很多C#開發人員來說,也許生活并不容易,因為很多C#程序員收入相對較低。希望本書能讓大家學習更輕松,工作更有成效,成為一本給力的軟件開發類書籍。有問題可以直接和筆者交流,請發郵件到luogang@gmail.com。最好有相關代碼反饋。習慣使用QQ群的讀者,可以加獵兔搜索QQ群:166015123。 編者 使用C#開發搜索引擎
前言
II
III
|
內容簡介:從C#基礎開始,逐漸深入,是學習搜索引擎開發的首選。應眾多公司的實際需求,本書介紹如何以C#作為工具開發搜索引擎。全書以完成一個網站搜索\垂直搜索作為目標,從網絡爬蟲抓取數據開始,然后到中文分詞、文本排重等文本挖掘技術和搜索結果展現。本書是市面上介紹業界熱門的Lucene.Net、使用WebBrowser做爬蟲以及結合Solr開發ASP.NET搜索的第一書。 本書適合專業軟件開發人員,也適合于希望學習搜索引擎工作原理的讀者學習使用。本書對于在校學生學習復雜數據結構和應用動態規劃等常用算法也有參考價值。
|
目錄: 第1章 使用c#開發搜尋引擎快速入門 1.1 各種搜尋引擎 1.1.1 通用搜索 1.1.2 垂直搜索 1.1.3 站內搜索 1.2 搜尋引擎整體結構 1.3 搜尋引擎基本技術 1.3.1 網路爬蟲 1.3.2 文本挖掘 1.3.3 全文索引 1.3.4 搜索語法介紹 1.3.5 搜索使用者介面 1.4 c#開發快速入門 1.4.1 準備開發環境 1.4.2 基本語法 1.4.3 多維陣列 1.4.4 位運算 1.4.5 枚舉類型 1.4.6 物件導向 1.4.7 集合類 1.4.8 泛型 1.4.9 委託和事件 1.4.10 類庫 1.5 本章小結 1.6 術語表
第2章 使用c#開發網路爬蟲 2.1 網路爬蟲抓取原理 2.2 爬蟲架構 2.2.1 基本架構 2.2.2 分散式爬蟲架構 2.2.3 垂直爬蟲架構 2.3 下載網頁 2.3.1 http協議 2.3.2 下載靜態網頁 2.3.3 下載動態網頁 2.4 網路爬蟲遍歷與實現 2.5 網站地圖 2.6 連接池 2.7 url地址查新 2.7.1 嵌入式資料庫 2.7.2 布隆篩檢程式 2.8 抓取rss 2.9 解析相對地址 2.10 網頁更新 2.11 資訊過濾 2.12 垂直行業抓取 2.13 抓取限制應對方法 2.13.1 更換ip地址 2.13.2 抓取需要登錄的網頁 2.13.3 抓取asp.net網頁 2.14 保存資訊 2.14.1 存入資料庫 2.14.2 存成圖像 2.15 日誌 2.16 本章小結 2.17 術語表
第3章 索引各種格式文檔 3.1 從html檔中提取資訊 3.1.1 識別網頁的編碼 3.1.2 規則運算式 3.1.3 html agility pack介紹 3.1.4 網頁正文提取 3.1.5 結構化資訊提取 3.1.6 查看網頁的dom結構 3.1.7 網頁結構相似度計算 3.2 從非html檔中提取文本 3.2.1 text文件 3.2.2 pdf文件 3.2.3 office文件 3.2.4 rtf文件 3.3 本章小結 3.4 術語表
第4章 自然語言處理 4.1 統計機器學習 4.2 文檔排重 4.3 中文關鍵字提取 4.3.1 關鍵字提取的基本方法 4.3.2 從網頁中提取關鍵字 4.4 相關搜索 4.5 拼寫檢查 4.5.1 拼寫檢查的概率模型 4.5.2 模糊匹配問題 4.5.3 英文拼寫檢查 4.5.4 中文拼寫檢查 4.6 文本摘要 4.6.1 文本摘要的設計 4.6.2 實現文本摘要技術 4.6.3 lucene.net中的動態摘要 4.7 文本分類 4.7.1 自動分類的介面定義 4.7.2 自動分類的實現 4.8 自動聚類 4.8.1 文檔相似度 4.8.2 k均值聚類方法 4.8.3 k均值實現 4.9 拼音轉換 4.10 句法分析樹 4.11 資訊提取 4.12 本章小結 4.13 術語表
第5章 用c#實現中文分詞 5.1 漢語中的詞 5.2 文本切分的基本方法 5.3 有限狀態機 5.4 查找詞典演算法 5.4.1 標準trie樹 5.4.2 三叉trie樹 5.5 中文分詞的原理 5.6 中文分詞流程與結構 5.7 切分詞圖 5.7.1 保存切分詞圖 5.7.2 生成全切分詞圖 5.8 概率語言模型的分詞方法 5.8.1 一元模型 5.8.2 n元模型 5.9 最大熵 5.10 未登錄詞識別 5.11 詞性標注 5.12 地名切分 5.12.1 網址類別性標注 5.12.2 未登錄詞識別 5.13 本章小結 5.14 術語表
第6章 lucene.net原理與應用 6.1 lucene.net快速入門 6.1.1 索引文檔 6.1.2 搜索文檔 6.1.3 lucene.net結構 6.2 lucene.net深入介紹 6.2.1 索引原理 6.2.2 分析文本 6.2.3 遍歷索引庫 6.2.4 檢索模型 6.2.5 收集最相關的文檔 6.3 索引中的壓縮演算法 6.3.1 變長壓縮 6.3.2 差分編碼 6.4 創建和維護索引庫 6.4.1 設計一個簡單的索引庫 6.4.2 創建索引庫 6.4.3 向索引庫中添加索引文檔 6.4.4 刪除索引庫中的索引文檔 6.4.5 更新索引庫中的索引文檔 6.4.6 索引的優化與合併 6.5 查找索引庫 6.5.1 布林查詢 6.5.2 同時查詢多列 6.5.3 跨度查詢 6.5.4 萬用字元查詢 6.5.5 過濾 6.5.6 按指定列排序 6.5.7 查詢大容量索引 6.5.8 函數查詢 6.5.9 定制相似性 6.5.10 評價搜索結果 6.6 中文資訊檢索 6.6.1 lucene.net中的中文處理 6.6.2 lietu中文分詞的使用 6.6.3 定制tokenizer 6.6.4 解析查詢串 6.6.5 實現字詞混合索引 6.7 抓取資料庫中的內容 6.7.1 讀取數據 6.7.2 資料同步 6.8 概念搜索 6.9 本章小結 6.10 術語表
第7章 實現搜索使用者介面 7.1 搜尋網頁面設計 7.1.1 用於顯示搜索結果的asp.net 7.1.2 搜索結果分頁 7.1.3 設計一個簡單的搜尋網頁面 7.2 實現搜索介面 7.2.1 lucene.net搜索介面 7.2.2 指定範圍搜索 7.2.3 搜尋網頁面的索引緩存與更新 7.3 實現關鍵字高亮顯示 7.4 實現分類統計視圖 7.4.1 搜索結果分類統計與導航 7.4.2 層次樹 7.5 相關搜索詞 7.6 實現ajax自動完成 7.6.1 總體結構 7.6.2 伺服器端處理 7.6.3 流覽器端處理 7.7 集成其他功能 7.7.1 拼寫檢查 7.7.2 再次查找 7.7.3 黑名單 7.7.4 搜索日誌 7.8 本章小結
第8章 使用solr開發網站搜索 8.1 搜索伺服器端 8.8.1 solr結構 8.1.2 啟動solr伺服器 8.1.3 配置支援中文的solr 8.1.4 索引資料 8.1.5 查詢功能 8.1.6 高亮 8.2 solr的.net用戶端 8.2.1 使用solrnet 8.2.2 實現多分類 8.2.3 分類統計 8.3 查詢語法 8.3.1 對空格的支持 8.3.2 日期加權 8.4 索引分佈 8.5 本章小結
第1章 使用C#開發搜索引擎快速入門 1 1.1 各種搜索引擎 1 1.1.1 通用搜索 2 1.1.2 垂直搜索 2 1.1.3 站內搜索 3 1.2 搜索引擎整體結構 3 1.3 搜索引擎基本技術 4 1.3.1 網絡爬蟲 4 1.3.2 文本挖掘 4 1.3.3 全文索引 4 1.3.4 搜索語法介紹 7 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 泛型 17 1.4.9 委托和事件 17 1.4.10 類庫 20 1.5 本章小結 20 1.6 術語表 20 第2章 使用C#開發網絡爬蟲 22 2.1 網絡爬蟲抓取原理 22 2.2 爬蟲架構 24 2.2.1 基本架構 25 2.2.2 分布式爬蟲架構 26 2.2.3 垂直爬蟲架構 27 2.3 下載網頁 28 2.3.1 HTTP協議 28 2.3.2 下載靜態網頁 31 2.3.3 下載動態網頁 35
2.4 網絡爬蟲遍歷與實現 42 2.5 網站地圖 44 2.6 連接池 44 2.7 URL地址查新 45 2.7.1 嵌入式數據庫 46 2.7.2 布隆過濾器 48 2.8 抓取RSS 50 2.9 解析相對地址 53 2.10 網頁更新 53 2.11 信息過濾 56 2.12 垂直行業抓取 60 2.13 抓取限制應對方法 60 2.13.1 更換IP地址 61 2.13.2 抓取需要登錄的網頁 64 2.13.3 抓取ASP.NET網頁 66 2.14 保存信息 69 2.14.1 存入數據庫 69 2.14.2 存成圖像 70 2.15 日志 71 2.16 本章小結 74 2.17 術語表 75 第3章 索引各種格式文檔 78 3.1 從HTML文件中提取信息 78 3.1.1 識別網頁的編碼 78 3.1.2 正則表達式 80 3.1.3 Html Agility Pack介紹 84 3.1.4 網頁正文提取 88 3.1.5 結構化信息提取 100 3.1.6 查看網頁的DOM結構 104 3.1.7 網頁結構相似度計算 106 3.2 從非HTML文件中提取文本 109 3.2.1 TEXT文件 109 3.2.2 PDF文件 109 3.2.3 Office文件 112 3.2.4 Rtf文件 113 3.3 本章小結 114 3.4 術語表 114
第4章 自然語言處理 115 4.1 統計機器學習 115 4.2 文檔排重 121 4.3 中文關鍵詞提取 129 4.3.1 關鍵詞提取的基本方法 129 4.3.2 從網頁中提取關鍵詞 132 4.4 相關搜索 132 4.5 拼寫檢查 133 4.5.1 拼寫檢查的概率模型 134 4.5.2 模糊匹配問題 134 4.5.3 英文拼寫檢查 138 4.5.4 中文拼寫檢查 141 4.6 文本摘要 142 4.6.1 文本摘要的設計 142 4.6.2 實現文本摘要技術 143 4.6.3 Lucene.Net中的動態摘要 148 4.7 文本分類 149 4.7.1 自動分類的接口定義 149 4.7.2 自動分類的實現 149 4.8 自動聚類 151 4.8.1 文檔相似度 151 4.8.2 K均值聚類方法 154 4.8.3 K均值實現 155 4.9 拼音轉換 157 4.10 句法分析樹 157 4.11 信息提取 164 4.12 本章小結 171 4.13 術語表 172 第5章 用C#實現中文分詞 174 5.1 漢語中的詞 174 5.2 文本切分的基本方法 174 5.3 有限狀態機 177 5.4 查找詞典算法 179 5.4.1 標準Trie樹 180 5.4.2 三叉Trie樹 185 5.5 中文分詞的原理 189 5.6 中文分詞流程與結構 192 5.7 切分詞圖 193 5.7.1 保存切分詞圖 194 5.7.2 生成全切分詞圖 198 5.8 概率語言模型的分詞方法 201 5.8.1 一元模型 201 5.8.2 N元模型 204 5.9 最大熵 208 5.10 未登錄詞識別 210 5.11 詞性標注 210 5.12 地名切分 220 5.12.1 地址類性標注 220 5.12.2 未登錄詞識別 220 5.13 本章小結 222 5.14 術語表 223
第6章 Lucene.Net原理與應用 224 6.1 Lucene.Net快速入門 224 6.1.1 索引文檔 225 6.1.2 搜索文檔 226 6.1.3 Lucene.Net結構 228 6.2 Lucene.Net深入介紹 229 6.2.1 索引原理 229 6.2.2 分析文本 231 6.2.3 遍歷索引庫 234 6.2.4 檢索模型 235 6.2.5 收集最相關的文檔 236 6.3 索引中的壓縮算法 240 6.3.1 變長壓縮 241 6.3.2 差分編碼 242 6.4 創建和維護索引庫 243 6.4.1 設計一個簡單的索引庫 243 6.4.2 創建索引庫 244 6.4.3 向索引庫中添加索引文檔 245 6.4.4 刪除索引庫中的索引文檔 247 6.4.5 更新索引庫中的索引文檔 247 6.4.6 索引的優化與合并 248 6.5 查找索引庫 248 6.5.1 布爾查詢 249 6.5.2 同時查詢多列 252 6.5.3 跨度查詢 253 6.5.4 通配符查詢 256 6.5.5 過濾 256 6.5.6 按指定列排序 258 6.5.7 查詢大容量索引 263 6.5.8 函數查詢 265 6.5.9 定制相似性 268 6.5.10 評價搜索結果 269 6.6 中文信息檢索 269 6.6.1 Lucene.Net中的中文處理 270 6.6.2 Lietu中文分詞的使用 270 6.6.3 定制Tokenizer 271 6.6.4 解析查詢串 273 6.6.5 實現字詞混合索引 276 6.7 抓取數據庫中的內容 280 6.7.1 讀取數據 280 6.7.2 數據同步 282 6.8 概念搜索 282 6.9 本章小結 285 6.10 術語表 286
第7章 實現搜索用戶界面 287 7.1 搜索頁面設計 287 7.1.1 用于顯示搜索結果的ASP.NET 287 7.1.2 搜索結果分頁 290 7.1.3 設計一個簡單的搜索頁面 291 7.2 實現搜索接口 291 7.2.1 Lucene.Net搜索接口 291 7.2.2 指定范圍搜索 296 7.2.3 搜索頁面的索引緩存與更新 297 7.3 實現關鍵詞高亮顯示 300 7.4 實現分類統計視圖 301 7.4.1 搜索結果分類統計與導航 301 7.4.2 層次樹 305 7.5 相關搜索詞 307 7.6 實現AJAX自動完成 308 7.6.1 總體結構 308 7.6.2 服務器端處理 310 7.6.3 瀏覽器端處理 310 7.7 集成其他功能 312 7.7.1 拼寫檢查 313 7.7.2 再次查找 313 7.7.3 黑名單 314 7.7.4 搜索日志 315 7.8 本章小結 316
第8章 使用Solr開發網站搜索 317 8.1 搜索服務器端 317 8.8.1 Solr結構 317 8.1.2 啟動Solr服務器 318 8.1.3 配置支持中文的Solr 321 8.1.4 索引數據 324 8.1.5 查詢功能 325 8.1.6 高亮 328 8.2 Solr的.NET客戶端 329 8.2.1 使用SolrNet 329 8.2.2 實現多分類 336 8.2.3 分類統計 338 8.3 查詢語法 341 8.3.1 對空格的支持 341 8.3.2 日期加權 342 8.4 索引分布 344 8.5 本章小結 345
使用C#開發搜索引擎
目錄
VI
V
|
序: |