日本語校正支援

正規表現を利用して日本語文書ファイルの校正支援を行う

同等のawkプログラムへ

概要

html文書など、日本語の文書を作成する際、 特に複数の人が協力して文書を作成する際に問題になるのが 表記のゆれ(仮名遣い、半角・全角問題、漢字表記かひらがなか、など) です。 ここでは、utf-8対応perl(バージョン5.8以上)を利用した 日本語文書校正支援を行うプログラムを紹介します。

プログラム

プログラムは以下のようになります。 エディタを開き以下をタイプして、適当な名前でセーブしてください。ここでは proof.pl という名前でセーブしたことにして話を進めます。
#-----------------------------------------------------------------------
#
#		日本語校正支援	
#
# 使用方法
#	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;

ルールファイル

このプログラムは、入力データとは別にルールファイルが 必要です。 ルールファイルは
パターン(正規表現で記述) TAB 注釈
というタブ区切りファイルで記述します。
ここでは以下のようなルールファイルが、
[0-9]	半角数字にする	
[A-Z]	半角英字にする
[a-z]	半角英字にする
[()]	半角の括弧にする
およぼ[さしすせそ]	及ぼす
気付[かきくけこい]	気づく
^$	空行
^従って	文頭の場合は「したがって」
rule.txt という名前で用意されているとします。

入力データ

入力データとして、 ここでは以下のようなファイルが
3回失敗した。10回成功した。
PCのOSはLinuxがよい。
(括弧が正しく対応していない)
悪影響をおよぼしています。
気付いたときには遅かった。

従って、彼は彼女の命令に従っている。
sample.txt という名前で用意されているとします。

実行結果

OSは Windowsを利用していると 仮定します。 DOS prompt 上で、
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:文頭の場合は「したがって」|	<<従って>>、彼は彼女の命令に従っている。
と出力されるはずです。

正規表現について

正規表現については、 ここ で簡略に説明されています。
メニューに戻る
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN