高手收集整理的baidu分詞算法分析之一 查詢處理以及分詞技術(shù)(1)
隨著搜索經(jīng)濟(jì)的崛起,人們開始越加關(guān)注全球各大搜索引擎的性能、技術(shù)和日流量。作為企業(yè),會根據(jù)搜索引擎的知名度以及日流量來選擇是否要投放廣告等;作為普通網(wǎng)民,會根據(jù)搜索引擎的性能和技術(shù)來選擇自己喜歡的引擎查找資料;作為技術(shù)人員,會把有代表性的搜索引擎作為研究對象. 搜索引擎經(jīng)濟(jì)的崛起,又一次向人們證明了網(wǎng)絡(luò)所蘊(yùn)藏的巨大商機(jī)。網(wǎng)絡(luò)離開了搜索將只剩下空洞雜亂的數(shù)據(jù),以及大量等待去費(fèi)力挖掘。
但是,如何設(shè)計(jì)一個(gè)高效的搜索引擎?我們可以以百度所采取的技術(shù)手段來探討如何設(shè)計(jì)一個(gè)實(shí)用的搜索引擎.搜索引擎涉及到許多技術(shù)點(diǎn),比如查詢處理,排序算法,頁面抓取算法,CACHE機(jī)制,ANTI-SPAM等等.這些技術(shù)細(xì)節(jié),作為商業(yè)公司的搜索引擎服務(wù)提供商比如百度,GOOGLE等是不會公之于眾的.我們可以將現(xiàn)有的搜索引擎看作一個(gè)黑盒,通過向黑盒提交輸入,判斷黑盒返回的輸出大致判斷黑盒里面不為人知的技術(shù)細(xì)節(jié).
查詢處理與分詞是一個(gè)中文搜索引擎必不可少的工作,而百度作為一個(gè)典型的中文搜索引擎一直強(qiáng)調(diào)其”中文處理”方面具有其它搜索引擎所不具有的關(guān)鍵技術(shù)和優(yōu)勢.那么我們就來看看百度到底采用了哪些所謂的核心技術(shù).
我們分兩個(gè)部分來講述:查詢處理/中文分詞.
一. 查詢處理
用戶向搜索引擎提交查詢,搜索引擎一般在接受到用戶查詢后要做一些處理,然后在索引數(shù)據(jù)庫里面提取相關(guān)的信息.那么百度在接受到用戶查詢后做了些什么工作呢?
1. 假設(shè)用戶提交了不只一個(gè)查詢串,比如”信息檢索 理論 工具”.那么搜索引擎首先做的是根據(jù)分隔符比如空格,標(biāo)點(diǎn)符號,將查詢串分割成若干子查詢串,比如上面的查詢就會被解析為:<信息檢索,理論,工具>三個(gè)子字符串;這個(gè)道理簡單,我們接著往下看.
2. 假設(shè)提交的查詢有重復(fù)的內(nèi)容,搜索引擎怎么處理呢?比如查詢”理論 工具 理論”,百度是將重復(fù)的字符串當(dāng)作只出現(xiàn)過一次,也就是處理成等價(jià)的”理論 工具”,而GOOGLE顯然是沒有進(jìn)行歸并,而是將重復(fù)查詢子串的權(quán)重增大進(jìn)行處理.那么是如何得出這個(gè)結(jié)論的呢?我們可以將”理論 工具”提交給百度,返回341,000篇文檔,大致看看第一頁的返回內(nèi)容.OK.繼續(xù),我們提交查詢”理論 工具 理論”,在看看返回結(jié)果,仍然是那么多返回文檔,當(dāng)然這個(gè)不能說明太多問題,那看看第一頁返回結(jié)果的排序,看出來了嗎?順序完全沒有變化,而GOOGLE則排序有些變動,這說明百度是將重復(fù)的查詢歸并成一個(gè)處理的,而且字符串之間的先后出現(xiàn)順序基本不予考慮(GOOGLE是考慮了這個(gè)順序關(guān)系的).
3. 假設(shè)提交的中文查詢包含英文單詞,搜索引擎是怎么處理的?比如查詢”電影BT下載”,百度的方法是將中文字符串中的英文當(dāng)作一個(gè)整體保留,并以此為斷點(diǎn)將中文切分開,這樣上述的查詢就切為<電影,BT,下載>,不論中間的英文是否一個(gè)字典里能查到的單詞也好,還是隨機(jī)的字符也好,都會當(dāng)作一個(gè)整體來對待.至于為什么,你用查詢” 電影dfdfdf下載”看看結(jié)果就知道了.當(dāng)然如果查詢中包含數(shù)字,也是如此辦理.
到目前為止,一切很簡單,也很清楚,百度怎么處理用戶查詢的呢?歸納如下:首先根據(jù)分割符號將查詢分開,然后看看是否有重復(fù)的字符串,如果有,就拋棄多余的,只保留一個(gè),接著判斷是否有英文或者數(shù)字,如果有的話,把英文或者數(shù)字當(dāng)作一個(gè)整體保留并把前后的中文切開.
接著該干什么呢?該考慮分詞的問題了.
中文分詞首先,講講百度的分詞時(shí)機(jī)或者條件問題,是否是個(gè)中文字符串百度就拿來切一下呢?非也,要想被百度的分詞程序榮幸的切割一下也是要講條件的,哪能是個(gè)字符串就切割啊?你當(dāng)百度是賣鋸條的么? 那么什么樣的字符串才滿足被切割的條件呢?簡單說來,如果字符串只包含小于等于3個(gè)中文字符的話,那就保留不動,當(dāng)字符串長度大于4個(gè)中文字符的時(shí)候,百度的分詞程序才出馬大干快上,把這個(gè)字符串肢解掉. 怎么證明呢?我們向百度提交”電影下載”,看看返回結(jié)果中標(biāo)為紅字的地方,不難看出來,查詢已經(jīng)被切割成<電影,下載>兩個(gè)單詞了,說明分詞程序已經(jīng)開工了,如果是比4個(gè)中文字符更長的字符串,那分詞程序就更不客氣了,一定大卸八塊而后快.我們來看看三個(gè)字符的情況,提交查詢”當(dāng)然擇”,看起來這個(gè)查詢不倫不類,那是因?yàn)槲蚁M吹竭@個(gè)字符串被切分為<當(dāng)然,擇>,返回結(jié)果365篇相關(guān)頁面,翻到最后一頁,發(fā)現(xiàn)標(biāo)紅的關(guān)鍵字都是”當(dāng)然擇”連續(xù)出現(xiàn)的情況,好像沒有切分,但是還不確定,那么再提交人工分好的查詢”當(dāng)然擇”看看,返回結(jié)果1,090,000篇,基本上可以確定沒有進(jìn)行分詞了,當(dāng)然另外一種解釋是:對于三個(gè)字符先切分,然后將切分后的結(jié)果當(dāng)作一個(gè)短語查詢,這樣看到的效果和沒有切分是相似的.但是我傾向于判斷百度對于少于3個(gè)字符的串沒有切分,奧卡姆不是說了么”如無必要,勿增實(shí)體”,干嗎做無用功呢.那么如果沒有切分,會有一個(gè)隨之而來的問題,怎么從索引庫里面提取未切分的字符串呢?這牽扯到索引的問題,我覺得百度應(yīng)該采取了兩套索引機(jī)制,一種是按照單詞索引,一種是按照N-GRAM索引,至于索引的具體問題,以后在詳細(xì)論述. OK,看到這里可能頭已經(jīng)有些暈了,最后總結(jié)一下百度的分詞算法,當(dāng)然里面還是有猜測的成分,算法如下: 首先查詢專用詞典(人名,部分地名等),將專有名稱切出,剩下的部分采取雙向分詞策略,如果兩者切分結(jié)果相同,說明沒有歧義,直接輸出分詞結(jié)果
相關(guān)文章
美元人民幣匯率查詢與即時(shí)美元匯率中間牌價(jià)的網(wǎng)站
美元人民幣匯率查詢與即時(shí)美元匯率中間牌價(jià)的網(wǎng)站...2007-03-03令人吃驚的SEO實(shí)驗(yàn)-拼音網(wǎng)站實(shí)驗(yàn)
令人吃驚的SEO實(shí)驗(yàn)-拼音網(wǎng)站實(shí)驗(yàn)...2007-11-11網(wǎng)站主機(jī)簡介告訴你網(wǎng)站運(yùn)行的原理
看了下面的東西,一定要注意理解,你就會明白了,網(wǎng)站的運(yùn)行原理2008-08-08Apache和IIS共享80端口的四個(gè)設(shè)置方法
有時(shí)候電腦同時(shí)安裝了apche和iis,而且我們需要共用80端口,你就可以測試一下下面的方法2008-09-09解析網(wǎng)站301重定向的實(shí)現(xiàn)方法,包括iis,apache,asp,php的方法
解析網(wǎng)站301重定向的實(shí)現(xiàn)方法,包括iis,apache,asp,php的方法...2007-11-11