跳到主要內容

CocoaCKIPClient 中研院斷詞系統Mac客戶端程式


自然語言處理系統最基本需要讓電腦能夠分辨文本中字詞的意義,才能夠更進一步發展出自然語言處理系統的相關演算法。其中斷詞處理便是一個重要的前置技術,而中研院的斷詞系統便是一個處理中文斷詞的系統。現階段,中研院的斷詞系統客戶端能找到的有JavaPHPRuby、和C#的,但卻沒找到Objective-C的應用,只好自己包一個簡易的API來用。現在,我把結果放在CocoaCKIPClient的專案裡面。

中研院的斷詞系統用的是TCP socket將資料由客戶端傳一個特定的XML到伺服器,並由伺服器傳回XML結果。CocoaAsyncSocket是個處理socket連線的API,CocoaCKIPClient用了這個API來處理這些TCP socket的連線。CocoaAsyncSocket需要Security.framework,要記得在Xcode專案裡頭加進去。

另一個問題,就是要去產生要送出的XML,並且處理中研院斷詞系統伺服器傳回來的XML。中研院的斷詞系統可以接受Big5或UTF-16編碼的XML,但是傳回的XML卻是Big5編碼的。無論是哪一種編碼,和NSString預設用的UTF-8都不一樣,需要進行轉換。希望以後中研院那邊可以更新編碼,至少要傳回的XML要是unicode編碼的吧!

上述兩項工作就是各式CKIP客戶端程式所要做的工作,我的CocoaCKIPClient只不過是用Objective-C將上述兩個工作給包起來而已。

使用方法
[CKIP *ckip = [CKIP alloc] initWithDelegate:self username:@"username" password:@"password"];
[ckip setRawText:@"這行是要被斷詞的資料"];
[ckip performCKIP];
資料回傳後,可以用delegate方法 ckip:didReceiveProcessStatus:code: 先檢查回傳資料是否有問題。
  • code=0 表示成功,可以開始處理斷詞的結果;
  • code=1 表示伺服器內部發生錯誤,可能是由不預期的字元或是過於複雜的句子結構所造成; 
  • code=2 表示接收到的XML格式有錯誤; 
  • code=3 表示帳號或密碼錯誤。

資料的回傳用的是delegate方法 ckipDidFinish:
只輸出分詞:
NSMutableArray *terms = [NSMutableArray new];
for (NSDictionary *t in [ckip terms]) {
    [terms addObject:[NSString stringWithFormat:@"%@\t%@", [t objectForKey:@"term"], [t objectForKey:@"tag"]]];
}
[textView setString:[terms componentsJoinedByString:@"\n"]];


輸出分詞後的句子:
[textView setString:[[ckip sentences] componentsJoinedByString:@"\n"]];


其餘的應用細節,請看CocoaCKIPClient的範例程式。當然,你也可以直接下載這個專案來試用。

注意:中研院的伺服器每天早上六點進行維護,每次大概約半個鐘頭,這段時間可能無法連線。

留言

熱門文章

差不多食譜:萬聖節的蛋白霜幽靈們 Halloween Meringue Ghosts

說到十月,月底的萬聖節肯定是驚嚇指數最高的一天,到處飄忽的幽靈們更是西洋鬼節的主角。不甘心這天總是被 Trick-or-Treat(不給糖就搗蛋)威脅,差不多食譜今年要開始來反擊,邀請大家來當 Ghostbusters 魔鬼剋星,將這群調皮搗蛋的幽靈們一網打盡。 抓鬼的先決條件就是⋯⋯得有些幽靈鬼怪來抓。這可是練習擠花的好時機,因為幽靈本來就是奇形怪狀的,什麼樣的怪樣子都不奇怪,太精緻反而有點奇怪呢!做好直送嘴巴「喀嚓」,看它還敢不敢來 Trick-or-Treat!

差不多食譜:蜂蜜烤南瓜 Roasted Pumpkin with Honey

還記得差不多食譜分享過用煎的南瓜吧!那是屬於家常菜的做法,現在差不多食譜推出另外一種做法,淋上蜂蜜,用烤箱加上精緻的裝飾,讓家常菜變身成為派對食物。相信當你端出這盤「蜂蜜烤南瓜」時,肯定會吸引不少眼球的注意。

金門。毋忘在莒勒石 “Wu Wang Zai Jyu” Inscription

金門有塊石頭,不去看看感覺怪怪的,看了又覺得實在沒什麼。聰明的你應該猜到了,就是那塊出現在教科書裡頭的「毋忘在莒」,金門的象徵。印象中,刻著「毋忘在莒」的那塊大石頭旁邊光禿禿的。或許從小學畢業二十多年後,我頭一次有機會來拜見這塊石頭,旁的小樹苗已經長成這副模樣了吧!再過幾年,恐怕要在林蔭中尋找「毋忘在莒」這四個字。但真要問起「毋忘在莒」這四個字是什麼意思,我相信不少人需要稍微想一下。