百度国学搜索探密
/*版權聲明:可以任意轉載,轉載時請務必標明文章原始出處和作者信息 .*/
百度國學搜索探密
中科院軟件所 張俊林(http://blog.csdn.net/malefactor)
?? 2006年1月11日
?
?? 年底寫論文作實驗搞得頭昏腦脹,中午放松一下上網看看新聞,原來百度推出了國學搜索,平常也比較喜歡看詩詞歌賦方面的東西,就上百度試了試,結果搜索結果讓我感覺哪里好像不對勁,所以就稍微花點時間看看百度在后面作了些什么.
?? 我說的不對勁到不是搜索結果本身,而是搜索結果的存放方式,你會發現百度所有搜索結果都放在http://guoxue.baidu.com/page/這個目錄下面.比如搜索”詩經”,所有返回結果頁面都是guoxue.baidu.com/page/caabbead/XXX.html
?? 這說明什么?說明百度所有的國學書籍都是存儲在guoxue.baidu.com/page/這個目錄下面,每個書籍一個目錄,每個目錄下面若干頁面,每個頁面是這個書籍的一部分.然后我感覺很好奇的是,目錄名是按照什么原則命名的呢?比如”詩經”為什么是caabbead呢?看著這個字符串非常有親切感,好像認識又叫不上名字,是誰呢?對了,很像是中文字符的字符編碼,那到底是不是呢?做個實驗,把”詩經”放到UltraEdit里面選擇HEX EDIT看看編碼發現還真實這么回事情,在實驗幾個,比如”紅樓夢”,HEX EDIT編碼: baecc2a5c3ce,那么我們試試百度存放在哪里,理論上應該存放在guoxue.baidu.com/page/baecc2a5c3ce這個目錄下,那么構建URL: guoxue.baidu.com/page/baecc2a5c3ce/1.html看看,你看到了什么?跟我們的預期一樣,是紅樓夢,不過不是第一章,是第二章,這個出乎我的意料,看來百度程序員有職業習慣從0開始計算啊,試試, guoxue.baidu.com/page/baecc2a5c3ce/0.html,嗯,是第一章了.
?? 看來百度是這么做的:每個書籍一個目錄,目錄名就是書名的字符編碼,每個章節或者段落是一個靜態頁面,目錄頁面是http://guoxue.baidu.com/page/xxxx/index.html,每個書籍都是若干靜態頁面組成的,所有數據放在http://guoxue.baidu.com/page/目錄下而且不允許用戶直接訪問這個目錄,想要大批量收藏古籍的先生太太老爺小姐門可以考慮寫個小程序自動從百度抓取啊,百度真是個好人,呵呵.
那么后臺怎么處理呢?這個看來很簡單,后臺應該有三個數據庫,一個是人名倒排索引,記載了作者和作品信息,這個是為了支持按照作者查找的;一個是書名倒排索引,記載出現過數目的頁面,這個是為了支持按照書名查找的,另外一個是全文倒排索引,這個是為了按照內容查找的,那么內容索引是怎樣的呢?建立了N-GRAM索引還是分詞后按照詞匯索引的呢?所謂N-GRAM索引,就是說不考慮分詞,而按照下面方法建立索引:
比如”百度搜索”,2-gram索引記載下面信息:”百度 度搜 搜索”,3-gram就是”百度搜 度搜索”,依次類推.用戶輸入”度搜”作為查詢,那么數據庫里面記載了信息,就把”百度搜索”提取出來了.
結論是百度分詞后進行索引的沒有采用N-GRAM,比如用”土群”你是搜不到東西的,而用” 郴土”是可以搜索到”郴土群山高”,說明沒有用N-GRAM否則用”土群”也可以搜索出這句話的.
在我看來,國學搜索這種東西實際的有需求的用戶有多少很難說,只是具有象征意義,百度推出這么個搜索無非是想強調自己是做中文的而已,但是從上面分析你可以看出來,這種搜索技術上實現起來跟中文又有多少關系呢?要想真正把國學搜索做好要花的功夫遠非現在百度所采取的技術實現能夠達到的.
補充(1月12日):
排序是搜索引擎的核心,經過我分析,百度國學的排序原則是最傳統的TF.IDF方法,排序公式如下:
Rank(w)=TF(w)*IDF(w)/Doclen
?
TF(w):w出現在文章中的次數,如果出現在文章的書名,那么權重加大.
IDF(w):w的所有數據庫文件中多少個文件出現(DF(w)),然后求倒數1/DF(w)
Doclen:文章長度.
?
另外,采用了CACHE機制.
如果所有文章數據采取XML 格式整理好的話,對于做搜索的公司來說,構造這么一個檢索系統還是比較花費時間的,我估計得用30分鐘到1天的時間才能完成整個系統-:)
總結
- 上一篇: 搜索引擎设计实用教程(5)-以百度为例
- 下一篇: Google怎么做(1.相关提示)