正規表現を利用して日本語文書ファイルの校正支援を行う
同等のawkプログラムへ
#-----------------------------------------------------------------------
#
# 日本語校正支援
#
# 使用方法
# perl proof.pl ルールファイル, 作業ファイル, ...
#
#
#-----------------------------------------------------------------------
use Encode;
$rulenum = 0;
# ルールの読み込み
open(IN, $ARGV[0]);
while( <IN> ) {
s/[\r\n]//g;
$original_rule = decode( "shiftjis", $_ );
@field = split( /\t/, $original_rule );
$rulenum++;
$rule[$rulenum] = $original_rule;
$pattern[$rulenum] = $field[0];
$comment[$rulenum] = $field[1];
if ( $pattern[$rulenum] eq "" ) {
printf( "パターンがありません:%d:%s\n",
$rulenum, $_ );
exit;
}
if ( $comment[$rulenum] eq "" ) {
printf( "注釈がありません:%d:%s\n",
$rulenum, $_ );
exit;
}
}
if ( $rulenum == 0 ) {
printf( "ルールがないかファイルが開けません\n");
exit;
}
close(IN);
for ( $i = 1; $i <= $#ARGV; $i++ ) {
open(IN, $ARGV[$i]);
while(<IN>) {
s/[\r\n]//g;
$original_string = decode( "shiftjis", $_ );
for ( $j = 1; $j <= $rulenum; $j++ ) {
$string = $original_string;
$string =~ s/$pattern[$j]/<<$&>>/g;
if ( $string ne $original_string ) { # matched
$output_string = encode( "shiftjis",
$string );
$output_comment = encode ( "shiftjis",
$comment[$j] );
printf( "%s:%d\t%d:%s|\t%s\n",
$ARGV[$i], $., $j,
$output_comment, $output_string );
}
}
}
close(IN);
}
exit;
rule.txt という名前で用意されているとします。[0-9] 半角数字にする [A-Z] 半角英字にする [a-z] 半角英字にする [()] 半角の括弧にする およぼ[さしすせそ] 及ぼす 気付[かきくけこい] 気づく ^$ 空行 ^従って 文頭の場合は「したがって」
sample.txt という名前で用意されているとします。3回失敗した。10回成功した。 PCのOSはLinuxがよい。 (括弧が正しく対応していない) 悪影響をおよぼしています。 気付いたときには遅かった。 従って、彼は彼女の命令に従っている。
とタイプします。c:\perl> perl proof.pl -rule.txt sample.txt
と出力されるはずです。sample.txt:1 1:半角数字にする| <<3>>回失敗した。<<1>><<0>>回成功した。 sample.txt:2 2:半角英字にする| <<P>><<C>>の<<O>><<S>>はLinuxがよい。 sample.txt:3 4:半角の括弧にする| (括弧が正しく対応していない<<)>> sample.txt:4 5:及ぼす| 悪影響を<<およぼし>>ています。 sample.txt:5 6:気づく| <<気付い>>たときには遅かった。 sample.txt:6 7:空行| <<>> sample.txt:7 8:文頭の場合は「したがって」| <<従って>>、彼は彼女の命令に従っている。
Copyright © 2004 TKEN