カタカナ語について
私 せきとは、中野区議会2007年第二回定例会の本会議質問の中で、カタカナ語の濫用について触れました。中野区の文書や口頭説明はカタカナ語があまりに多 く、区民からも解りづらいと批判の声が上がっているので、日本語言い換えの努力など、区民に歩み寄ることが大切だと指摘しました。
かく言うせきとはどうなのか、この説明義務を果たす一つの試みとして、トップページの一番下に当ホームページ全体のカタカナ率を表示するようにしました。スクリプトを自作してカタカナ率を計算していますが、ここではそのスクリプトを紹介します。
kana.pl
- 言語はPerl5.8.6です。これがないと走りません。Encodeモジュールも必須です。
- コマンドラインから呼び出し、調べたいディレクトリを打ち込んでください。
- 指定したディレクトリ以下の階層を辿り、HTMLファイルとプレインテキストファイルだけに対して処理をかけます。
- 文字コードはShift-JIS、EUC_JP、UTF-8に対応しています。
- 全角カタカナだけを拾います。句読点や記号、英数字、半角カタカナは、全文の文字数(分母)に数えます。
- UTF-8で日本語の文字数を得るには、
length ( decode ( $str ) )とします。単にlength ( $str )では、バイト数が返ってきてしまいます。 拡張子の有無によってディレクトリかどうかを判別していますが、これは改善されなければなりません。改善しました(2007年9月18日)。- 以下にコードを記します。
#!/usr/local/bin/perl
#初期設定。
use Encode ;
use Encode::Guess qw/ shiftjis euc-jp 7bit-jis / ;
use Encode qw / from_to / ;
$tag_regex_ = q{[^"'<>]*(?:"[^"]*"[^"'<>]*|'[^']*'[^"'<>]*)*(?:>|(?=<)|$(?!\n))} ;
$comment_tag_regex = '<!(?:--[^-]*-(?:[^-]+-)*?-(?:[^>-]*(?:-[^>-]+)*?)??)*(?:>|$(?!\n)|--.*$)' ;
$tag_regex = qq{$comment_tag_regex|<$tag_regex_} ;
#調べたいディレクトリをユーザに尋ねる。
unless ( $root ) {
print "\nEnter Dir... " ;
$root = <> ;
chop $root ;
print "\n" ;
}
#子階層を辿り、ファイルディレクトリ一覧を得る。
#HTMLファイルとプレインテキストのみ。
do {
opendir ( DIR, "$root/$dir" ) ;
@readdir = readdir ( DIR ) ;
closedir ( DIR ) ;
@readdir = grep ( !/^\.+/, @readdir ) ;
foreach ( @readdir ) {
$_ = "$dir/$_" ;
push ( @dir, $_ ) if ( -d "$root/$_" ) ;
}
push ( @filedir, grep ( /\.(html|txt)$/, @readdir ) ) ;
} while ( $dir = shift ( @dir ) ) ;
#対象となったファイルのカタカナ率を調べる。
foreach ( @filedir ) {
print "$_\t" ;
open ( IN, "$root$_" ) ;
@src = <IN> ;
close ( IN ) ;
$src = join ( "", @src ) ;
$enc = guess_encoding ( $src ) ;
$enc = "shiftjis" if $enc !~ /^Encode::/ ;
from_to ( $src, $enc, 'utf8' ) ;
$src =~ s/[\r\n\t\s]//g ;
$src =~ s/$tag_regex//g if ~ /html$/ ;
push ( @len_all, length ( decode ( 'utf8', $src ) ) ) ;
# $src =~ s/'(?:\xA5[\xA1-\xF6])'//g ; # EUC-JP
$src =~ s/\xE3(\x82[\xA1-\xBF]|\x83[\x80-\xBF])//g ;
# $src =~ s/[ァ-ヴー]//g ; #ダメな正規表現。
push ( @len, $len_all[$#len_all] - length ( decode ( 'utf8', $src ) ) ) ;
$enc = $1 if $enc =~ /(shiftjis|euc|utf8)/ ;
print sprintf ( "%.2f", $len[$#len] / $len_all[$#len_all] * 100 ) ;
print "%\t$enc\t$len[$#len]/$len_all[$#len_all]\n" ;
}
#合計する。
$len_all += $_ foreach @len_all ;
$len += $_ foreach @len ;
#桁揃えして結果を表示。
$kana_per = sprintf ( "%.2f", $len / $len_all * 100 ) ;
while ( $len =~ s/(.*\d)(\d\d\d)/$1,$2/ ) {} ;
while ( $len_all =~ s/(.*\d)(\d\d\d)/$1,$2/ ) {} ;
$filenum = $#filedir + 1 ;
print "ファイル数=$filenum\n\nカタカナ率$kana_per%(カタカナ$len字/全文$len_all字)です。\n\n" ;
undef ( $_ ) foreach ( @readdir, @filedir, @src, $src ) ;
1;
