發新話題
打印

CoreSeek :Sphinx + 中文字典檔:中文分詞搜尋引擎

CoreSeek :Sphinx + 中文字典檔:中文分詞搜尋引擎

首先,這篇給已經使用Sphinx(Thinking Sphinx)而有中文分詞需求的使用者

以前寫Thinking Sphinx系列文章的時候其實就看過CoreSeek這個...奇怪的東西,當時沒有太研究,最近才有挖出來之類的...

先說中文分詞是啥鬼好了,簡單的來說,類似
複製內容到剪貼板
代碼:
#搜尋"我們"
"我們一起去" #=> true
"我和他們一起去" #=> true
okay...因為沒做分詞,只做單字的話兩筆會完全符合,且無法排序(相似度),而MySQL即時搜尋用"like"......我想你在把效能當兒戲|||,Sphinx內定沒這功能之類的,因為預設是做給英文語系使用,有空白還是啥標點符號可以分詞,但中文就不支援了,so~ 無聊都在找解決方案,今天又晃到CoreSeek...

稍微的看了些CoreSeek的說明有的沒的...簡單的來說就是對岸有人開公司,然後把Sphinx clone,加上中文分詞支援,然後改名為CoreSeek(GPLv2)...就這樣而已...所以連執行檔等等都叫"searchd"......

[[此時Catz組長眉頭一皺發現事情並不單純...X"D]]

okay...所以看了些說明裝起來...把Think Sphinx的執行位置修一下...開下去...可以跑了...還可以有分詞..yooooooo!!!!!

安裝前先寫...分詞庫&給觀看這篇的人心理準備些
複製內容到剪貼板
代碼:
略知一二 1
x:1
企划 1
x:1
个个 1
x:1
于都县 1
x:1
无烟日 1
x:1
番茄酱 1
x:1
取决于 1
x:1
雷锋班 1
x:1
槽体 1
x:1
配给 1
x:1
声儿 1
x:1
拿手戏 1
x:1
哲 11
x:11
外行话 1
x:1
海斯队 1
x:1
丝路 1
x:1
令人心悸 1
x:1
okay...所以此篇標題會有"中文字典檔"這部份,而內定是"簡體中文"字典檔...

CoreSeek的核心其實是Sphinx(...已前述) + mmseg這個分詞(引擎|演算法),然後mmseg...要餵字典檔才行,so~ 有自建詞庫的心理準備後(如何自建後述),才繼續看下面的安裝說明

安裝說明頁(詳細入內)
安裝下載頁(3.2.14)

[精簡版安裝說明,Ubuntu11.04測試ok]
複製內容到剪貼板
代碼:
#安裝前安裝(+mysql支援)
$ sudo apt-get install automake libtool libmysqlclient-dev #make & mysql-dev
$ wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
$ tar xzvf coreseek-3.2.14.tar.gz
$ cd coreseek-3.2.14
$ cd mmseg-3.2.14
$ ./bootstrap
$ ./configure --prefix=/usr/local/mmseg3
$ make && make install
$ cd ..
$ cd csft-3.2.14
$ sh buildconf.sh
$ ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql
$ make && make install
$ cd ..
之後ThinkSphinx修正(請先參考之前的ThinkSphinx說明文件)

[[sphinx.yml]]
複製內容到剪貼板
代碼:
#  charset_table <= 請刪除這...一大行/段
  bin_path: /usr/local/coreseek/bin #設定CoreSeek的path
#下面為增加
  charset_dictpath: /usr/local/mmseg3/etc/ #字典檔位置
  charset_type: zh_cn.utf-8
  ngram_len: 0
A...官方文件都是"zh_cn.utf8"沒有"zh_tw.utf8"可以選|||不過看起來應該可以work才是,而字典檔的path預設在"/usr/local/mmseg3/etc/unigram.txt",所以改charset_dictpath就可以改字典檔和lib的位置(...只有三個小檔案cp出來即可)

okay,CoreSeek說明至此...基本上應該已經可以跑了X"D...&部份分詞ok(如果符合它的分詞檔的話),so...以下...如何自己建分詞庫[發想]

hmm...首先...不就是分詞庫,你可以選擇spam各大辭典有的沒的的網站,不然就到處亂挖文章來自建分詞,如裁切標點符號/英文/介係詞/形容詞...剩下的應該就會是詞庫(當然要花一些功夫),另外一個最簡單的詞庫就是來自於使用者的"搜尋關鍵字"...簡單的來說"第一次"會找不到,然後系統過濾後把使用者該次的搜尋關鍵字分離後塞到分詞庫即可,按照使用者習慣等等這會是很好的解法之類的(當然還是可能需要人工過濾有的沒的)

其實還有奇怪的來源...像是Yahoo輸入法 or 新酷音...這種奇怪的詞庫來源就是了X"D[超過兩字以上,符合使用者打字習慣]

okay以上,獻給需要Sphinx效能需求與分詞需求的人 :P
(Plurk) 人因夢想而偉大,如果沒有信仰,則將一無所有,持續往殉道的路邁進,獻祭著自己的靈魂,走著最極端的路;而那迷霧的後面,會是地獄,也是天堂
self.attributes #=> [惡搞之魂,貓化身,怪咖吸鐵石,邪道程式設計師,動漫宅,蘿莉控,惡趣味,Geek,H=F^3]
[82,117,98,121,32,79,110,32,82,97,105,108,115,32,105,115,32,77,121,32,76,105,102,101].map{|l|l.chr}.to_s

TOP

發新話題