Lingua::*::Romanize::* は、日本語・中国語・韓国語の UTF-8 文字列の各国語の読みを
ローマ字化するPerlモジュール群です。
Lingua::JA::Romanize::Japanese は、
日本語(漢字かな混じり文)
をローマ字化します。→詳細
Japanese 付属の Juman・MeCab モジュールで、形態素解析を利用した読み下しにも対応します。
Lingua::ZH::Romanize::Pinyin は、
中国語(標準語読み)
をローマ字(ピンイン)化します。→詳細
Pinyin 付属の Cantonese モジュールで、香港などの広東語読みをサポートします。
Lingua::KO::Romanize::Hangul は、
韓国語(ハングル文字)
をローマ字化します。→詳細
ダウンロードは、CPAN またはこちら↓からどうぞ。
日本語用:
Lingua-JA-Romanize-Japanese-0.23.tar.gz
TARGZ
CPAN
SVN
中国語用:
Lingua-ZH-Romanize-Pinyin-0.23.tar.gz
TARGZ
CPAN
SVN
韓国語用:
Lingua-KO-Romanize-Hangul-0.20.tar.gz
TARGZ
CPAN
SVN
Perl 5.005/5.6.x/5.8.x で利用できます。
バージョン 0.20 以降は、utf8 フラグに対応しています。
(Perl 5.8.1以降)
開発中のソースコードは、
Google Code
上に置いています。
CPAN からインストールできます。
ソースからインストールする場合も、通常通りです。
perl Makefile.PL && make && make test sudo make install
日本語版のインストール中、Makefile.PL 時に
拡張辞書ファイル
をダウンロードするか否かが聞かれます。
ダウンロードしない場合は、添付の SKK-JISYO.S 辞書を利用します。
デフォルトは [y](HTTP経由で辞書ファイルをダウンロードする)です。
中国語版・韓国語版のインストール時は、特に確認メッセージはありません。
日本語用は、
DB_File モジュールが必須です。
Perl 5.005/5.6.x の場合は、追加で
Jcode モジュールも必要です。(Perl 5.8.xでは不要)
拡張辞書ファイルをダウンロードする場合は、
LWP::UserAgent モジュールも必要です。
オプション機能の JUMAN・MeCab の形態素解析を利用する場合は、
こちら を参照して下さい。
中国語用は、
Storable モジュールが必須です。
Perl 5.005/5.6.x の場合は、追加で
Unicode::Map モジュールと
Unicode::String モジュールも必要です。(Perl 5.8.xでは不要)
韓国語用は、特に必須の依存モジュールはありません。
オンライン・デモ は別ページに移動しました。
各クラスはそれぞれ new() コンストラクタに加えて、
以下の3つのメソッドを提供しています。
サンプルは日本語の場合ですが、どのクラスも使い方は同じです。
use Lingua::JA::Romanize::Japanese; my $conv = Lingua::JA::Romanize::Japanese->new(); my $kanji = "字"; my $roman = $conv->char( $kanji ); printf( "<ruby><rb>%s</rb><rt>%s</rt></ruby>", $kanji, $roman );
char() メソッドは、漢字等の1文字をローマ字に変換します。
戻り値はローマ字(半角英字)です。
ローマ字に変換できない場合は、undefが返ります。
漢字などでローマ字に複数の候補がある場合は、/ 区切りで並んで返ります。
my $string = "文字列の場合"; print $conv->chars( $string ), "\n";
chars() メソッドは、漢字等を含む文字列をローマ字に変換します。
漢字(または単語)が複数ある場合は、半角スペースで区切られて格納されます。
my @array = $conv->string( $string ); foreach my $pair ( @array ) { my( $raw, $ruby ) = @$pair; if ( defined $ruby ) { printf( "<ruby><rb>%s</rb><rt>%s</rt></ruby>", $raw, $ruby ); } else { print $raw; } }
string() メソッドは、漢字等を含む文字列をローマ字に変換します。
戻り値は2次元配列になっています。
元の漢字とローマ字のペア(配列リファレンス)が並ぶ配列になっています。
$array[0] # 最初の文字のペア(配列リファレンス) $array[1][0] # 2文字目の元の漢字 $array[1][1] # 2文字目のローマ字(半角英字)
日本語については文字単位で読みを切れないことが多いため、
単語単位でペアを組む場合があります。
中国語・韓国語については、必ず文字単位で区切られます。
@array = Lingua::JA::Romanize::MeCab->new()->string('動物園でパンダを見た。');
例えば、↑の実行結果として以下のような配列が返ります。
@array = ( [ '動物', 'doubutsu' ], [ '園', 'en' ], [ 'で', 'de' ], [ 'パンダ', 'panda' ], [ 'を', 'wo' ], [ '見', 'mi' ], [ 'た', 'ta' ], [ '。' ], );
日本語版の
Lingua::JA::Romanize::Japanese モジュールでは
SKKの辞書
を利用した読み下し処理を行います。
具体的には SKK-JISYO.L、SKK-JISYO.jinmei、SKK-JISYO.geo、
SKK-JISYO.station、SKK-JISYO.propernoun の各辞書を使用しています。
辞書データファイルは、モジュールインストール時(Makefile.PL)に
内部処理用の DB_File (Berkeley DB) 形式に変換しています。
2006年4月現在のSKK L辞書からは、453,936キーワード(単語)が登録されます。
DB_File でなく NDBM_File であればほぼ全ての Perl 実行環境で利用できますが、
NDBM_File では exists 関数が使えないため、使用できませんでした。
また、SDBM_File は全ての Perl 実行環境で利用できるものの、
ファイルサイズがDB_Fileの倍近くと大きくなり、動作も遅いため、使用できませんでした。
Makefile.PLを利用しない場合は、
アーカイブを展開したディレクトリで
手動で以下のコマンドを実行してください。
lib ディレクトリ内に辞書ファイルが生成されるので、
この lib ディレクトリごとコピーすれば
make install せずに本モジュールを利用できます。
perl -Ilib -MLingua::JA::Romanize::DictJA -e 'Lingua::JA::Romanize::DictJA->update();'
ひらがな・カタカナ→ローマ字の変換処理は、
Lingua::JA::Romanize::Kana モジュールが担当します。
変換ルールは、
ヘボン式
を基本にしています。(パスポートの表記に近い)
ただし、長音(訓令式の^記号)は処理しません。
また、オプション機能として
JUMAN
(の Perl バインディング Juman.pm)がインストールされた環境では、
Lingua::JA::Romanize::Juman モジュールにより
JUMAN の形態素解析を利用した読み下し処理が利用可能です。
(Juman.pm のインストール手順については
コチラ)
JUMAN サーバ機能を利用せずにコマンド版の juman を利用する場合は
予め juman コマンドに PATH を通しておく必要があります。
(/usr/bin/juman 等に入っていればOK)
同様に、 MeCab (の Perl バインディング MeCab.pm)がインストールされた環境では、 Lingua::JA::Romanize::MeCab モジュールにより MeCab の形態素解析を利用した読み下し処理が利用可能です。 (MeCab.pm のインストール手順については コチラ)
※かな→ローマ字変換処理は、完全なヘボン式ではありません。
Miyagawa さんの
Lingua::JA::Hepburn::Passport の方が正確なようです。
Dan さんの
Lingua::JA::Kana というモジュールもあります。
(どちらも、かな→ローマ字のみ対応です。漢字には対応していません)
中国語版の Lingua::ZH::Romanize::Pinyin モジュールでは cxterm 付属の辞書ファイル PY.tit(GB2312&BIG5版)を利用して、 ローマ字(ピンイン)変換を行います。
広東語版の Lingua::ZH::Romanize::Cantonese モジュールでは 同じく cxterm 付属の辞書ファイル CTLau.tit(GB2312版)と CTLauBig5.tit(BIG5版)を利用して、 ローマ字変換を行います。
どちらも、モジュールインストール時(Makefile.PL)に
内部処理用の Storable 形式に変換しています。
Makefile.PLを利用しない場合は、
アーカイブを展開したディレクトリで
手動で以下のコマンドを実行してください。
perl -Ilib -MLingua::ZH::Romanize::DictZH -e 'Lingua::ZH::Romanize::DictZH->update();'
lib ディレクトリ内に辞書ファイルが生成されるので、 この lib ディレクトリごとコピーすれば make install せずに本モジュールを利用できます。
韓国語版の Lingua::KO::Romanize::Hangul モジュールでは Unicode の文字コード番号からハングルの初声・中声・終声のコードを計算して、 ローマ字を決定します。
初声 (0~18) |
g | kk | n | d | tt | r | m | b | pp | s | ss | - | j | jj | ch | k | t | p | h | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ㄱ | ㄲ | ㄴ | ㄷ | ㄸ | ㄹ | ㅁ | ㅂ | ㅃ | ㅅ | ㅆ | ㅇ | ㅈ | ㅉ | ㅊ | ㅋ | ㅌ | ㅍ | ㅎ | ||||||||||
中声 (0~20) |
a | ae | ya | yae | eo | e | yeo | ye | o | wa | wae | oe | yo | u | wo | we | wi | yu | eu | ui | i | |||||||
ㅏ | ㅐ | ㅑ | ㅒ | ㅓ | ㅔ | ㅕ | ㅖ | ㅗ | ㅘ | ㅙ | ㅚ | ㅛ | ㅜ | ㅝ | ㅞ | ㅟ | ㅠ | ㅡ | ㅢ | ㅣ | ||||||||
終声 (0~27) |
- | g | kk | ks | n | nj | nh | d | r | lg | lm | lb | ls | lt | lp | lh | m | b | ps | s | ss | ng | j | c | k | t | p | h |
ㅤ | ㄱ | ㄲ | ㄳ | ㄴ | ㄵ | ㄶ | ㄷ | ㄹ | ㄺ | ㄻ | ㄼ | ㄽ | ㄾ | ㄿ | ㅀ | ㅁ | ㅂ | ㅄ | ㅅ | ㅆ | ㅇ | ㅈ | ㅊ | ㅋ | ㅌ | ㅍ | ㅎ |
ハングルでは、初声・中声・終声の3パーツの組み合わせで文字が構成されています。
(終声を付けない場合は、2パーツのみ)
Unicode のハングル文字コードは、AC00~D7A3 に規則的に並んでいます。
文字コード = AC00+(初声×21×28)+(中声×28)+(終声)
この計算式でUnicodeの文字コードを取得できます。
L::K::R::Hangul モジュールではこの逆方向の計算を行っています。
韓国語版では外部辞書ファイルは使用していません。
※上記の変換テーブルの赤字の箇所は、バージョン 0.20 で
文化観光部2000年式
に対応するのに伴い、従来と変更になった箇所です。
この変換テーブル変更以外にも、前後の子音を確認して読み替え処理を追加しています。
トラックバックURL:http://www.kawa.net/service/tb/ajaxtb.cgi/works/perl/romanize/romanize.html
Kawa.netxp © Copyright 2006-2008 Yusuke Kawasaki