kakasi 並不是火影忍者那位卡卡西,他的全名是 Kanji Kana Simple Inverter,用來轉換日文漢字、平假名、片假名和羅馬拼音的。
最近因為在弄一些和日文搜尋相關的東西,要處理平假名片假名混和搜尋的問題,所以在 IRC 上問人,在 zonble 提供的幾個連結中,我最後用的是 kakasi,在 ubuntu 上只要執行apt-get install kakasi
就可以了,這我還是在抓原始碼來編譯後才發現的@@。程式使用很簡單,就用 pipeline 丟字串進去,然後加上參數看要進行怎樣的轉換,不過有小問題是他只吃 sjis 編碼,所以在 UTF-8 下的環境要先過 iconv 轉編碼,輸出在轉回來,以下面的 code 為例:
echo '魔神英雄伝' | iconv -f utf8 -t sjis -c | kakasi -JK | iconv -f sjis -t utf8
就可以看到 マジンエイユウデン ,這樣我就可以在 python script 裡面呼叫一下命令列來轉字串,處理資料庫的資料,不過要放上網路的程式這樣呼叫其實蠻危險的,所以我又找了一下 PHP 有沒有這東西可以用,沒想到還真的有,在 PECL 裡面有人有 port,不過網站上看不到,我是從 google 搜尋到 mail list 的 舊文章 才找到的,所以就照文內的安裝步驟抓下來 compile,ubuntu 記得要先apt-get install php5-dev
才有辦法執行phpize
初始化編譯環境,裝好後就可以在 phpinfo 裡面看到 kakasi 這個模組。
然後測試的結果發現他也只能吃 sjis 字串,所以還是要用 iconv 轉一下碼,使用範例如下:
$roma = kakasi(iconv("UTF-8", "sjis", $qs[0]), array("-Hj", "-Jj", "-Kj"));
這串因為是轉成羅馬拼音的,所以最後沒在用一次 iconv 轉回 UTF-8,至於各種轉換的設定請參考kakasi -help
。