最近這個專案有個難點就是要用到搜尋引擎,而這裡最難的就是分詞技術,我從網上找了一些分詞的資料,在這裡**一下。
目前的搜尋引擎,大多是基於一種稱為倒排索引的結構[1]。以什麼做為索引的key值,直接影響到整個搜尋引擎的準確度、召回率[2]、速度。我們先看看不使用中文分詞的情況。
如果不使用中文分詞,可以採用單個漢字索引方式。例如,雅虎,先索引'雅'字,然後再索引'虎'字。同樣,對於一篇文章,先把所有的漢字都單獨索引一次,並記錄他們的位置。搜尋過程中,也是先找'雅'字的所有文件,再找'虎'字的所有文件,然後做交叉'與'運算,即包含這兩個字,而且位置連續的文件才會做為符合要求的結果。這種方式是最基本的索引方式,現在有些小引擎中還在使用。但這裡存在乙個很有挑戰性的問題:總共的常用漢字是3000多個,我們每次查詢過程中,進行'與'操作的計算量會相當大,對於大資料量搜尋引擎來說(超過10億的文件),每天上億次查詢,這樣的索引結構,無疑是對硬體和演算法的極大挑戰。
考慮到速度問題,如果不使用分詞,還有另外一種選擇:n元組合索引方式,2元/3元等。拿2元來說,中國人,先索引'中國', 再索引'國人'。同樣,對於一篇文章,以2為單位,把所有相鄰的漢字都索引起來,並記錄他們的位置。搜尋過程中,也是先找包含'中國'的所有文件,再找'國人'的所有文件,然後做交叉'與'運算,即包含這兩個單元,而且位置連續的文件才會做為符合要求的結果。這樣以兩個字做為索引單元,可以大大減少在搜尋過程中的計算量。
以上兩種方式,都可以不需要分詞,也能實現搜尋引擎的索引和搜尋。但是這裡存在乙個不可忽視的問題:準確度。乙個很常見的例子:和服,如果按照上面兩種方式,都會查到包含'主機板和服務器'的文件;北大也會得到'東北大學'。對於大資料量的搜尋引擎來說,每個搜尋次都會有成千上萬個結果,使用者已經很挑選他真正想要的文章,如果這裡還要增加許多錯誤,估計使用者體驗會極差。這時候,我們需要中文分詞。
詞,是中文語言中最小的語意單位。以詞為單位做為搜尋引擎的索引的key值,會大大提高搜尋引擎結果的準確性,同時保證了搜尋過程中計算量小。其實還有乙個優點,以詞為單位的索引,索引庫會比上兩種方式小很多。很明顯:如果以中國人做為乙個詞,那麼搜尋的時候,不需要任何'與'運算,索引的時候記錄也會減少。
中文分詞和搜尋引擎
搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次 網際網路調查報告 顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文來說,空格代表詞...
中文分詞和搜尋引擎
winter 搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次 網際網路調查報告 顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中的非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文...
中文分詞和搜尋引擎
winter 搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次 網際網路調查報告 顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中的非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文...