跳到主要內容

Concise's Anatomy: MMSeg中文分詞


這些天一直在弄Concise中一項相當重要,卻又相當麻煩的功能——中文分詞。

在西方主導的語言學當中,單詞是語言的基本單位。英文、法文、德文等西方語言中的單詞多能以空格作為邊界來區分;但是熟悉中文的使用者都知道,在中文的書寫系統中,並不存在這種邊界。每個中文字、每個漢字都可能是一個單詞,甚至同樣的排列,依據不同的語氣來閱讀,會有不同的意思。從前在國中時,最常被拿來開玩笑的就是徐志摩的那句「數大便是美」,究竟是「數 | 大 | 便是 | 美」?或是「數 | 大便 | 是 | 美」?兩者的意思差了十萬八千里。



這個狀況讓我們在開始使用Concise之前就遇到了困境。那麼,到底怎麼樣算是一個單詞?這涉及中文分詞的技術。截至目前為止,還沒有研究團隊宣稱能完全掌握中文分詞,我只能夠從現有的幾個選擇中選出一個比較能接受的。

之前的Concise,我寫了一個介面連結到Yahoo的斷章取義,以及中央研究院的中文斷詞小組,借用遠端的服務來轉換成Concise的格式。這個方法是可行的,但是有一些限制在。首先,兩個系統都看不到分詞的過程是怎麼進行的,沒有詳細的演算法,就算對結果不滿意,也只能從傳回的資料再去想辦法。此外,對於多數研究要使用的專門語料庫,這兩個系統的API沒辦法載入外部的詞典。

為了處理這些東西,我決定找一個可用的分詞演算法,直接嵌入Concise當中。MMSeg成了我的選擇。如果你用C語言在寫程式,可以直接從演算法下方下載C語言的程式碼。至於Concise使用的Java,則可以從mmseg4j下手。

MMSeg的原理很簡單,先把文章斷成句子,再從句子裡頭去切分單詞。它的運作仰賴四個規則:

規則1:最大匹配。
規則2:最大平均單詞長度。
規則3:單詞長度的最小方差。
規則4:單字單詞的語素自由度的最大和。

詳細的介紹請看MMSeg的官方介紹,或自行下載程式碼看實際的運作過程。

MMSeg4j的另一個特點,就是能載入自訂的詞庫,比起泛用型的中文分詞服務,應當更適合專注於特殊領域的研究使用。原本內嵌於mmseg4j的辭典是搜狗(sogou)從網路環境擷取的,用在簡體中文的語境中好像滿OK的。但是用在繁體的語境,特別是台灣的中文語境當中,分詞好像怪怪的。於是我把裡面的字頻檔char.dic和辭典words.dic換成教育部所公佈的字頻和詞頻表。換過之後,好像好多了。不過還是不夠理想,比方說,名字似乎沒辦法辨識。最大的要素應當是教育部所收錄的常用單詞太少了,之後得增加一些詞庫來使用。

這個功能目前還在測試中,將會在下一個版本中嵌入。

留言

熱門文章

OREO聖誕麋鹿 #差不多食譜

聖誕節就快到囉!今年我們用現成的材料,來做些簡單好玩的小東西。第一個登場的,就是有著紅鼻子的麋鹿。 3隻「OREO聖誕麋鹿」差不多需要這些材料: OREO餅乾 ...... 3片 蝴蝶餅 ...... 3-6片(掰斷有失敗的機會) 餅乾棒 ...... 3根(我用百力滋) 眼睛糖 ...... 6顆 紅色m&m's ...... 3顆(紅鼻子) 融化的巧克力 ...... 適量(黏著用) 「OREO聖誕麋鹿」差不多是這麼做的: Step 1. 準備好材料 計算一下自己想要做多少隻OREO聖誕麋鹿,按照材料表把需要的餅乾糖果給買回來。材料備齊之後,就把巧克力拿去用微波爐融化備用。沒有微波爐的也可以隔水加熱,想辦法把巧克力融化就可以。 Step 2. 製作麋鹿 再過來就要開始製作麋鹿了!先把OREO轉開,留下有奶油的那邊,待會方便把餅乾稍壓一下固定。 把蝴蝶餅掰斷成鹿角的樣子,沾上巧克力,擺到OREO上面。餅乾棒同樣沾上巧克力,一樣放上OREO。接著蓋上OREO,稍微壓一下。 這邊可以大膽去擺,在巧克力凝固前都可以調整。要是發現黏不太住,多沾點巧克力再試試。 Step 3. 擺出表情 接下來要用眼睛糖和紅色m&m's做出麋鹿的表情。用筷子將眼睛糖和m&m's沾上巧克力,黏到眼睛鼻子相應的位置就可以。 沒有辦法買到眼睛糖的,可以用白巧克力先畫出眼白,再用黑巧克力點出眼珠。紅鼻子也可以自己換成橘色、綠色、藍色等等不同的m&m's。 Step 4. 讓巧克力凝固 表情做好之後不要馬上移動,得要有點耐心讓巧克力凝固。要不然悲劇馬上就會發生,不是表情變扭曲,就是整支麋鹿散架。 等巧克力凝固後,就可以像棒棒糖那樣拿起來玩耍了。再來杯熱牛奶,整隻麋鹿給他泡下去也很有趣。 最後幫大家整理一下「OREO聖誕麋鹿」的做法: 巧克力用微波爐加熱融化備用。 轉開OREO。 蝴蝶餅掰成鹿角的形狀,沾巧克力後放上OREO餅乾。 餅乾棒同樣沾上巧克力,擺上OREO餅乾。 蓋上餅乾,在眼睛糖和紅色m&m’s背後沾上巧克力,黏到眼睛和鼻子相應的位置。 稍微等一下,讓巧克力凝固就好囉!

木乃伊熱狗捲 Hot Dog Mummies - 差不多食譜 #萬聖節

這次我們繼續過萬聖節,來做個更簡單的「木乃伊熱狗捲」。看完材料表,相信你已經知道該怎麼做了。 「木乃伊熱狗捲」差不多需要這些材料: 小熱狗 ...... 4條(大熱狗可以切半使用) 起酥片 ...... 1片 蛋黃 ...... 1個 起司片 ...... 1片 海苔 ...... 1片 番茄醬 ...... 適量 「木乃伊熱狗捲」差不多是這麼做的: Step 1. 起酥片切條 從冷凍庫拿出起酥片,在室溫放一陣子,等它稍微變軟之後再開始切成細條。稍微放軟再切比較不會破掉。 Step 2. 捲熱狗 第二步,要開始加上熱狗來處理。方法也很簡單,就是把切好的起酥條一圈一圈纏上小熱狗,一條用完再接另一條繼續纏,怎麼纏都沒關係。 要是你的熱狗比較大根,可以切短一點來弄,造型會比較可愛。 Step 3. 刷蛋液送進烤箱 弄好之後來個蛋黃,稍微攪散就可以塗到纏著熱狗的起酥條上。蛋黃液是讓顏色稍微金黃一點,沒有塗蛋黃液的那些烤起來都白白的。 接著就可以送進烤箱了,用攝氏200度烤10分鐘左右,把起酥皮烤出你要的顏色就可以。 Step 4. 裝上眼睛,沾點番茄醬 出爐稍微放涼,趁這個時間來做眼睛。拿起司片弄成圓圓的眼睛,再拿一點海苔當眼球,組合好隨意擺到木乃伊熱狗上。這是萬聖節用的,真的只要亂擺就可以囉! 最後,隨意沾點番茄醬在繃帶上面,我們的木乃伊熱狗捲就完成囉! 結尾再幫大家複習一下「木乃伊熱狗捲」的做法: 酥片拿出來退冰,稍微軟化之後切成細條。 將起酥條一圈圈纏上小熱狗。 刷上蛋液,送入攝氏200度的烤箱烤到金黃。 稍微放涼,擺上起司片和海苔做的眼睛,再沾點番茄醬就好囉!

差不多食譜:手工巧克力餅乾 Chocolate Cookies

又是手工餅乾,最近一連出了兩份餅乾食譜,這個「手工巧克力餅乾」已經是第三份了。會不會有更多呢?我可以告訴大家,這是肯定的。 要怪就怪這個陰鬱的冬季雨天,哪裡都不方便去,也懶得出去。餅乾櫃空在那邊已經很久了,雖然有時候會嘴饞,但也沒有迫切去補貨的必要。反正經常開伙,平常該有的材料都會有,自己弄個成分完全透明的零食,也是個不錯的選擇。再說,用烤箱進行烘焙時,房間會變得比較乾燥,也比較溫暖。在夏天是個折磨,但到了冬天,這種感覺還滿不錯的。 話不多說,開始進行這一道「手工巧克力餅乾」的準備工作。