KAKASI用Pythonモジュールについて



KAKASIって、なに?

KAKASIの公式サイト(?)http://kakasi.namazu.org/によりますと「kanji kana simple inverterの略」だそうで、「漢字かなまじり文をひらがな文やローマ字文に変換すること」が目的のプログラムです。

早い話が、「本日は晴天なり。」と入力すると「ほんじつはせいてんなり。」と出力します。 (平仮名や片仮名ではなくローマ字出力したり、分かち書きしたりと、もっといろいろなことができます。)

うまく使いこなせば日本語を含むテキストファイルの処理に大変な威力を発揮しそうです。 (とくに索引作りなどに便利そうですよね。)

さて、先のKAKASIのサイトをご覧いただければわかるのですが、KAKASIを単体のプログラムとして使うほかにPerl及びRubyの拡張モジュールが用意されています。 スクリプト言語から使えるなら便利ですね。

あれ?Pythonは?

そう、Pythonの拡張モジュールがないのです。Webで探したんですけど見つけられませんでした。

では自分で作っちゃえ!ってことでちょちょいのちょいってな感じで30分くらいで作っちゃいました。 もしかして、もっとよく探せばあるのかもしれないですし、あった場合、そちらの方がより優れたものである可能性が高いのですが、拙作でも使ってくれる方が、もしも居るなら、ということで公開します。 DLL単体のバイナリとソースコードを公開しますので、必要のある方は修正してお使いください。 また、もしもダウンロードされる方は、できれば私宛ご連絡いただければ幸いです。(メールで結構です)

DLLバイナリはWindows2000SP2上でVisualC++ 6.0SP5を使いコンパイルしました。 ActiveStateActivePythonバージョン2.1.1 build212の環境でコンパイルしましたが、Python2.1なら使えるのではないかと思います。
環境が違う方はソースをコンパイルしてください。コンパイラをお持ちでない方はご相談ください^^;。(対応できるとは限りません)

注意点1:
KAKASI添付のREADME.libには

int kakasi_close_kanwadict()

KAKASIがデフォルトで使用する辞書をクローズします。kakasi_getopt_argvを
複数回呼び出す場合には、その前にかならずこの関数を呼ばなくてはなりません。
処理に成功した場合は0を、失敗した場合は1を返します。

このように書かれていますが、現時点ではこの関数は呼んでいません。

注意点2:
この拡張モジュールを使った結果何か不具合や問題が起こっても、一切の責任はとれませんのであしからず。

ダウンロードはこちら
Win32版Python2.1用
Win32版Python2.2用

ダウンロードしたファイルを解凍すると kakasiPy.dll 及び kakasiPy.c の2つのファイルが作成されます。 kakasiPy.c はソースコードです。 拡張モジュール本体は kakasiPy.dll ですので、Pythonのライブラリを置く場所へコピーしてください。 このDLLは内部で kakasi.dll を呼び出しますので、KAKASIを C:\kakasi にインストールしたならば C:\kakasi\lib にPATHを通してkakasi.dllを見つけられるようにしてください。 使い方は以下のような感じです。

C:\users\futot>python
ActivePython 2.1.1, build 212 (ActiveState)
Python 2.1.1 (#20, Jul 26 2001, 11:38:51) [MSC 32 bit (Intel)] on win32
Type "copyright", "credits" or "license" for more information.
>>>
>>> import kakasiPy
>>>
>>> arg = ['-JH', '-f']
>>> kakasiPy.kakasi_argvPy(arg)
0
>>> input = '本日は晴天なり。'
>>>
>>> output = kakasiPy.kakasi_doPy(input)
>>> print output
本日[ほんじつ]は晴天[せいてん]なり。
>>>
ご覧の通りで、kakasiPy.dllで公開しているメソッドは kakasi_argvPy 及び kakasi_doPy の2つです。

kakasi_argvPy には KAKASI をコマンドラインで起動する場合のオプションをPythonのリストで渡します。 成功すれば 0 を、失敗すれば 1 を返します。
kakasi_doPy は変換を実行するコマンドです。変換対象の文字列を渡すと変換後の文字列を返します。

以上、これだけです。