/ / WinChalow

正規表現の自動生成[perl]

2004-12-16

与えられた文字列の例から、正規表現を自動生成できたらシアワセになれるかもしれないテスト。

my $ex1 = "John Due	12	Admitted.";
my $reg1 = $ex1;
$reg1 =~ s/[A-Z]+/\(\[A-Z\]\+\)/og;
$reg1 =~ s/[a-z]+/\(\[a-z\]\+\)/og;
$reg1 =~ s/\t/\(\\t\)/og;
$reg1 =~ s/ +/\( \+\)/og;
$reg1 =~ s/\d+/\(\\d\+\)/og;
$reg1 =~ s/\.+/\(\.\+\)/og;
print $reg1, "\n";

例示:John Due[tab]12[tab]Admitted.
正規表現: ([A-Z]+)([a-z]+)( +)([A-Z]+)([a-z]+)(\t)(\d+)(\t)([A-Z]+)([a-z]+)(.+)

あまり欲張らずに、この程度のものであれば、なんとかなりそうはあと

次は、日本語の文字種を区別して正規表現にしてみるテスト。
#!/usr/bin/perl -w
# $Id: genreg2.pl,v 1.1 2004/12/16 08:12:38 zuihu Exp $

use strict;
use utf8;
use Encode qw(encode);

my $text = '漢字カナ混じり文をinputする';
$text =~ s/\p{InBasicLatin}+/\(\\p\{InBasicLatin\}\+\)/og;
$text =~ s/\p{InHalfwidthAndFullwidthForms}+/\(\\p\{InHalfwidthAndFullwidthForms\}\+\)/og;
$text =~ s/\p{Hiragana}+/\(\\p\{Hiragana}\+\)/og;
$text =~ s/\p{Katakana}+/\(\\p\{Katakana}\+\)/og;
$text =~ s/\p{Han}+/\(\\p\{Han}\+\)/og;

print encode('Shift_JIS', $text), "\n";


例示:漢字カナ混じり文をinputする
正規表現: (\p{Han}+)(\p{Katakana}+)(\p{Han}+)(\p{Hiragana}+)(\p{Han}+)(\p{Hiragana}+)(\p{InBasicLatin}+)(\p{Hiragana}+)

正規表現お助けマン・ツールとして使い勝手を向上させれば、なんとかなるだろうか。インターフェースの作り方が難しそうではある。「もそっと一般化をゆるめて」というような指示をどうやって与えるか、ですね。ムーグ・シンセサイザーみたいに意味不明のスライダーを100個くらいつけたGUIなんていうのが素敵ではある。人呼んで、「正規表現シンセサイザー」!

で、この先どうなるんでしょう??

(2004-12-16 11:33:52)

permlink