www.srekcah.org > ~utashiro > perl > scripts >

romkan.pl

説明

ローマ字を仮名に変換するための Perl ライブラリ。フィルタコマンドと して実行することも可能。

もっと詳しい説明

このライブラリは、元々 Unix Magazine の原稿を書くために作ったもので す。その後、若干仕様は変わっていますが基本は同じなので参考にはなると思 います。

ファイル

ファイル中に日本語 EUC コードが含まれています。 実行には jcode.pl も必 要です。
  • romkan.pl-1.7
  • romkan.pl-1.8
  • romkan.pl-1.9
  • 使い方

    SYNOPSIS

    require 'romkan.pl';
    $kana = &romkan($roman [, CODE [, KATAKANA]] );

    DESCRIPTION

    サブルーチン &romkan は、1番目の引数で与えられたローマ字文字列を平 仮名に変換した文字列を返す。文字列全体を変換することができなかった場合 には undef が返る。

    2番目の引数で返ってくる文字列の文字コードを指定することができる。デフォ ルトは 'euc' であり、他に 'jis' と 'sjis' を指定することが可能。

    3番目の引数に真の値が指定されると、平仮名ではなく片仮名の文字列を返す。 片仮名の指定だけをして文字コードを指定しない場合には、2番目の引数には undef を指定する。

    EXAMPLE
    ##
    ## 先頭から空白行までを除き、ローマ字に変換可能な単語を変換して出力する
    ##
    require('romkan.pl');
    while (<>) {
        s/([\w\-\']+)/&romkan($1)||$1/ge unless 1 .. /^$/;
        print;
    }
    

    実行例

    入力
    Ro-maji wo kana ni henkan suru tameno raiburari desu.
    Firuta-komando to site jikkou suru kotomo kanou desu.
    出力
    ろーまじ を かな に へんかん する ための らいぶらり.
    ふぃるたーこまんど と して じっこう する ことも かのう.

    デフォルトの変換ルール

    a	あ	i	い	u	う	e	え	o	お
    ka	か	ki	き	ku	く	ke	け	ko	こ
    ga	が	gi	ぎ	gu	ぐ	ge	げ	go	ご
    sa	さ	si	し	su	す	se	せ	so	そ
    za	ざ	zi	じ	zu	ず	ze	ぜ	zo	ぞ
    ta	た	ti	ち	tu	つ	te	て	to	と
    tsa	つぁ	tsi	つぃ	tsu	つ	tse	つぇ	tso	つぉ
    da	だ	di	ぢ	du	づ	de	で	do	ど
    na	な	ni	に	nu	ぬ	ne	ね	no	の
    ha	は	hi	ひ	hu	ふ	he	へ	ho	ほ
    fa	ふぁ	fi	ふぃ	fu	ふ	fe	ふぇ	fo	ふぉ
    pa	ぱ	pi	ぴ	pu	ぷ	pe	ぺ	po	ぽ
    ba	ば	bi	び	bu	ぶ	be	べ	bo	ぼ
    ma	ま	mi	み	mu	む	me	め	mo	も
    ya	や			yu	ゆ			yo	よ
    ra	ら	ri	り	ru	る	re	れ	ro	ろ
    wa	わ	wi	ゐ			we	ゑ	wo	を
    kya	きゃ	kyi	きぃ	kyu	きゅ	kye	きぇ	kyo	きょ
    gya	ぎゃ	gyi	ぎぃ	gyu	ぎゅ	gye	ぎぇ	gyo	ぎょ
    sha	しゃ	shi	し	shu	しゅ	she	しぇ	sho	しょ
    zya	じゃ	zyi	じぃ	zyu	じゅ	zye	じぇ	zyo	じょ
    ja	じゃ	ji	じ	ju	じゅ	je	じぇ	jo	じょ
    jya	じゃ	jyi	じぃ	jyu	じゅ	jye	じぇ	jyo	じょ
    tya	ちゃ	tyi	ちぃ	tyu	ちゅ	tye	ちぇ	tyo	ちょ
    cha	ちゃ	chi	ち	chu	ちゅ	che	ちぇ	cho	ちょ
    dya	ぢゃ	dyi	ぢぃ	dyu	ぢゅ	dye	ぢぇ	dyo	ぢょ
    tha	てゃ	thi	てぃ	thu	てゅ	the	てぇ	tho	てょ
    dha	でゃ	dhi	でぃ	dhu	でゅ	dhe	でぇ	dho	でょ
    nya	にゃ	nyi	にぃ	nyu	にゅ	nye	にぇ	nyo	にょ
    hya	ひゃ	hyi	ひぃ	hyu	ひゅ	hye	ひぇ	hyo	ひょ
    pya	ぴゃ	pyi	ぴぃ	pyu	ぴゅ	pye	ぴぇ	pyo	ぴょ
    bya	びゃ	byi	びぃ	byu	びゅ	bye	びぇ	byo	びょ
    mya	みゃ	myi	みぃ	myu	みゅ	mye	みぇ	myo	みょ
    rya	りゃ	ryi	りぃ	ryu	りゅ	rye	りぇ	ryo	りょ
    xa	ぁ	xi	ぃ	xu	ぅ	xe	ぇ	xo	ぉ
    xwa	ゎ	xtsu	っ	xtu	っ
    xya	ゃ			xyu	ゅ			xyo	ょ
    n'	ん	n	ん
    -	ー
    

    カスタマイズ

    変換テーブルは、$romkan'romkan_table という変数に定義されています。 romkan.pl を require する前に $romkan'romkan_table が設定されていると、 それが優先されます。デフォルトの変換ルールを変えたい場合には、ファイル からその部分をコピーして変更してください。

    変換は文字列の先頭に対して行われ、ルールの先頭から順番に適用されま す。順序を変更すると、思ったように動作しなくなることもありますので、注 意してください。行の先頭に対して、どのルールも適用できなくなると、変換 を中止して失敗します。

    プログラムは極めて短いので (処理部分は27行)、プログラム自体を変更し て利用するのも容易です。ただし、変換ルーチンは動的に生成して eval で評 価されるので、直接変更することはできません。どのようなルーチンが評価さ れているかを知りたい場合には、romkan.pl をコマンドとして -debug オプショ ンを付けて実行してみてください。

    コマンドとしての利用

    ライブラリとして使うことを目的として作られていますが、単独のコマン ドとしても動作します。たとえば、

    % romkan.pl file
    と実行すると、file の中のローマ字を仮名に変換して出力します。変換はワー ド単位で行い、うまく変換できない場合にはそのまま出力します。

    出力コードを指定することも可能で、-jis, -euc, -sjis のように指定します。

    出力を平仮名ではなく片仮名で表示したければ -katakana オプションを指 定できます。

    ファイルを標準入力にリダイレクトすると、パラグラフ単位で処理し、元 の文章も同時に出力します。ちょっと変な仕様ですね。どうしてこうしたのか は忘れてしまいました。ローマ字で書かれたメールを見るときにはちょっと便 利です。

    % romkan.pl < ローマ字メール

    これは元々テスト用に付いている機能で、処理しているのは最後の10行程 度の部分なので、これをコピーして好きなように改造して使ってください。オ プションの処理は先頭の perl -s で行っています。

    if (__FILE__ eq $0) {	# test main
        package main;
    
        print $romkan'sub_romkan if $debug;
    
        $/ = '' unless -t STDIN;
        $code = $jis ? 'jis' : $euc ? 'euc' : $sjis ? 'sjis' : undef;
    
        while (<>) {
    	print unless -t STDIN;
    	s/([\w\-\']+)/&romkan($1,$code,$katakana)||$1/ge;
    	print;
        }
    }
    

    -debug オプションを指定すると、中で実行されるサブルーチンを表示します。