在前一篇文章中,分析出了一個實現的具體思路,主要是利用中文分詞、Unicode編碼來解決無法使用mysql的全文索引進行中文搜尋的問題,本篇文章中將詳細介紹中文分詞的實現方法。
首先是解決中文分詞,中文分詞就是將一句中文進行拆分,得到一個個單一的詞,如“高薪誠聘註冊造價工程師”這句話,經過分詞處理後,會得到“高薪 誠聘 註冊 造價 工程師”一個個單一的詞。網上對中文分詞的技術有很多介紹,有很好的開源產品和服務介面。但是結合我們產品用的主流開發語言是PHP,所以還是偏向選擇了一個支援PHP模組擴充套件的開源中文分詞系統scws,便於直接整合進專案中進行呼叫。
至於如何安裝scws和生成php模組,不是本文介紹的重點,請參考官方文件,有很詳細的介紹。
安裝好scws並生成php的模組後,就可以直接呼叫scws提供的api進行中文分詞了,下面是一個用php呼叫scws進行中文分詞的方法,可以用來測試中文分詞。
- function ch_word_segment($text) {
- $so = scws_new(); //建立並返回一個SimpledCWS類操作物件
- $so->set_charset(`utf8`); //設定分詞詞典、規則集、欲分文字字串的字符集
- $so->set_multi(SCWS_MULTI_SHORT | SCWS_MULTI_DUALITY); //設定分詞返回結果時是否複式分割,這裡設定短詞和二元詞
- $so->send_text($text); //傳送要分詞的文字
- $result = $so->get_result(); //返回分詞結果
- $first = true;
- foreach ($result as $key => $value) {
- if ($first) {
- $word.=$value;
- $first = false;
- } else {
- $word.=` ` . $value; //返回值為以空格分隔的分詞字串
- }
- }
- return $word;
- }
如果安裝成功,執行以下程式碼,將得到“高薪 誠聘 註冊 造價 工程師”的輸出。
- print(ch_word_segment(`高薪誠聘註冊造價工程師`));