この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
広告
posted by fanblog
2016年02月01日
【Delphi】漢字をカナ変換する方法「kakasi for win32」
カナのフィールドが無かったりして、
急遽カナのフィールドが必要になることがあります。
手入力にて補うのが困難な場合、
名称フィールドを読み取って、
一括で自動変換してくれると助かります。
そんな時に便利なのが、「kakasi for Win32」。
kakasi for Win32
"KAKASI" という名称は、"kanji kana simple inverter" の略です。
また、東北大学(現: 京都大学)の佐藤雅彦先生によって開発された
SKK - simple kana kanji converter を逆から読んだものだそうです。
KAKASI の辞書のエントリのほとんどは SKK 辞書起源のものです。
KAKASI for Win32 は GPL2 に従っ たフリーソフトウェアです。
最新のkakasiは ココ から入手できます。
KAKASI に関する情報は ココ から入手できます。
kakasiをDelphiで利用するには
作成するソースは以下の通り。
※上記のようにソースを貼り付けたい場合は、
GitHub を利用してください。
これを適当なユニット名で保存し、
自分のプロジェクトに追加します。
今回は、u_kakasi.pas としました。
usesにu_kakasiを追加します。
後は、変換する箇所を記述。
ADOQry.FieldByName('カナ').AsString := ZenToHan(kakasi(ADOQry.FieldByName('名称').AsString, '-JK'));
全角カナに変換されるので、
これを以下の関数で半角カナに変換しています。
なお、kakasi を利用するには、
C:\kakasi\share\kakasi に「itaijidict」「kanwadict」を。
実行ファイルと同じフォルダに、「kakasi.dll」を配置しなければいけません。
kakasiの文字セットの変換指定オプション
a[jE]
E が指定されると JISx0208 の記号への変換になります。
それ以外のコードが指定されるか、
引数がないと変換しません。
-j[aE]
E が指定されると JISx0208 の記号への変換になります。
-k[ajKH]
aj を指定するとローマ字に変換します。
KH では JISx0208 のかたかなやひらがなに変換します。
-E[aj]
JISx0208 の記号を ASCII または JIS ROMAN にします。
-J[ajkHK]
まず辞書を引いて読み上げ、
aj が指定されるとローマ字に変換します。
k ではJISx0201のかたかなに、
H ではひらがなに、
K ではかたかなに変換します。
【変換例】
?@kakasi -JH
漢字をひらがなに変換します。
?Akakasi -Hk -Kk -Jk -Ea
すべての JISx0208 で定義された文字を変換します。
?Bkakasi -aE -jE -gE -kK
すべての文字を JISx0208 の文字に変換します。
?Ckakasi -Ha -Ka -Ja -Ea -ka
ローマ字変換
?Dkakasi -HK -KH
かたかなとひらがなを交換
※詳しくは、kakasi.sjisを参照してください。
<<< ライブラリについて >>>
「README-ja.win32」には、
「このアーカイブには Win32 向けの dynamic link library と static link library
を同梱してあります。
VC++6.0 で compile した dynamic link library は
lib\kakasi.dll と lib\kakasi.lib
です。
VC++6.0 で compile した static link library は
lib\libkakasi.lib
です。
mingw32 の gcc-2.95 で compile した static link library は
lib\libkakasi.a と lib\libkakasi.la
です。
include file は共通で
include\libkakasi.h
です。」
とありますので、VC++等ではDLL無しにできると思います。
Delphiの場合は難しいと思うので、
実行ファイル(EXE)と同じフォルダに置くようしましょう。
超便利!ブログにソースコードを掲載する