[Tokyo.pm] jus Benkyoukai
Kazumasa Utashiro
utashiro @ iij.ad.jp
1999年 9月 7日 (火) 10:33:02 CDT
From: maeda @ src.ricoh.co.jp
Subject: Re: [Tokyo.pm] jus Benkyoukai
Date: Tue, 7 Sep 1999 14:08:09 +0900
> 歌代さん> 他にはどんな便利なことがありますか?
>
> format。
あいや、すみません。コンテキストがわかるように引用したつもりだったんで
すが、シンプルすぎましたね。正規表現に日本語が使えることについてのつも
りでした。
◇◇◇
正規表現中の * 等のコンストラクトは直前の要素に対して適用されますが、
JPerl の正規表現処理は、バイトではなく日本語文字を最小要素として扱うよ
うに修正されています (1)。
もう一つの最大の利点は宮田さんの指摘するように、文字クラス内に日本語文
字を記述できることです (2)。
◇◇
(1) は、確かに入力の手間と可読性を考えると便利なのですが、(...) による
グルーピングを使えば同じことは実現できますし、Perl5 の (?:...) を使え
ば、ほぼ同等な正規表現を作ることも可能です。
◇
(2) は、機能的に極めて優れた特長ですが、ちょっと気になる点があります。
正規表現中で文字クラスを使うことのメリットは何でしょうか? パイプ (|)
を使った選択に比べて文字クラスが優れている点は、可読性もありますが
direct indexing によって、検査が非常に高速に行われることにあります。
jperl の正規表現エンジンは、果たしてこの特長を引き継ぐように実装されて
いるのでしょうか? コードを見たわけではありませんが、答はおそらく NO で
しょう。実現すれば、メモリ容量的に大きなペナルティを負うはずです。
◇◇
さて、文字クラスのみに着目した場合、効率的なメリットを考えないとすれば、
単に文字を列挙する文字クラスは | によって置換可能です。そうすると、こ
れは (1) の問題に帰着するような気がします。
◇◇
文字クラスの持つもう一つの特長は、範囲指定が可能なことです。宮田さんの
言う [ア-ン] のような使い方です。
これにも、単純ではない問題が含まれていると感じています。宮田さんは片仮
名を指定するのに、どのような正規表現を使いましたか?
[ア-ン] ですか?
それとも [ァ-ン] ですか?
それとも [ァ-ヴ] ですか?
それとも [ァ-ヵ] ですか?
それとも [ァ-ヶ] ですか?
それとも [ア-ンー] ですか?
それとも [ァ-ンー] ですか?
それとも [ァ-ヴー] ですか?
それとも [ァ-ヵー] ですか?
それとも [ァ-ヶー] ですか?
それとも [ア-ンー゛°] ですか?
それとも [ァ-ンー゛°] ですか?
それとも [ァ-ヴー゛°] ですか?
それとも [ァ-ヵー゛°] ですか?
それとも [ァ-ヶー゛°] ですか?
皆さん、それぞれの表現が、どのような意味を持っているか理解できますか?
平仮名だったらどうですか?
別の質問をしましょう。[ハ-ホ] という文字クラスには、どのような文字がマッ
チすると思いますか?
もう少し聞くと [・] はどうしますか? [ヽヾゝゞ〃] というような文字はど
う扱いますか?
さて、ここでもう一度考えてみて、宮田さんの目的を達成するために、JPerl
の持つ日本語処理機能は、本当に十分なものだったのでしょうか?
◇◇
いろいろ書きましたが、上のような問題があるにしても、平仮名や片仮名に関
しては、文字クラスによる範囲指定というのは、それなりに利用価値はあると
思います。しかし、それ以外に、どのような利用価値があるのかを聞きたいと
いうのが、前回のメールの意図でした。
片仮名言葉を抽出するだけであれば、普通の perl を使って8年前にそういう
プログラムを作っています (これは jperl にも対応してたりしますが)。これ
にしても、たくさんの同様な問題を含んでいます。僕には、そういう問題の方
がより重要に思えるのです。JPerl が解決しているのは、何なのでしょうか。
◇◇◇
JPerl の日本語正規表現は、確かに有用な特長を持っています。しかし、上に
書いたようなことを十分に検討して作られていると言えるでしょうか?
僕は JPerl の存在を決して否定するつもりはありません。しかし、『無いよ
りもまし』という以上の設計上の信念が感じられないという点がどうもひっか
かって、あまり積極的に使いたいという気がしてこないのです。もちろん、人
並以上に使ってからのことです。
jperl を作ってリリースを続ける努力には敬服します。しかし、もっと別の努
力の仕方もあったのではないかと思います。やってみなけりゃわからないとい
うことはもちろんあります。初期のリリースに関しては、何でもいいから実装
することに意味があったとも思います。しかし、今までにそれを見直す機会は
あったのではないでしょうか。Perl5 に対応するときに、単に Perl4 と同じ
ものを手直ししてくっつけるのが、果たして最適な方法だったのでしょうか。
◇◇◇
さて、我々は、今、何をすべきなのでしょうか?
--utashiro
Tokyo-pm メーリングリストの案内