ということで、またまたperlスクリプトを書いてみた。ただ単純に置換しているだけだから、数字の入った漢字熟語まで無思慮に変換してしまうのでご注意を。
(『すぐわかるPerl』『すぐわかる オブジェクト指向 Perl』『文字コード「超」研究』の著者・深沢千尋さんがご自身のBlog「イジハピ!」に、このスクリプトの“すぐわかる”解説を書いてくれました。うれしい! http://blog.query1000.com/archives/39051213.html )
#!/usr/bin/perl
use utf8;
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
binmode STDIN, ':utf8';
while(<>) {
# 単位語の前に数字がない場合「一」を補う
s/(?<![一二三四五六七八九千百十])(?=[兆億万])/一/g;
s/(?<![一二三四五六七八九])(?=[千百十])/一/g;
# 欠けている桁をゼロとして復活させる
s/(?<=兆)(?![一二三四五六七八九][十百千万]?億)/〇億/g;
s/(?<=億)(?![一二三四五六七八九][十百千]?万)/〇万/g;
s/(?<=[兆億万])(?![一二三四五六七八九]千)/〇千/g;
s/(?<=千)(?![一二三四五六七八九]百)/〇百/g;
s/(?<=百)(?![一二三四五六七八九]十)/〇十/g;
s/(?<=十)(?![〇一二三四五六七八九])/〇/g;
# 単位語のうち千百十を消す
s/[千百十]//g;
# 億万でゼロを整理
s/〇〇〇〇[億万]//g;
s/(?<=[兆億万])〇+//g;
# 洋数字に変換
y/〇一二三四五六七八九/0123456789/;
# 3桁毎にコンマを挿入
s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g;
print $_;
}
*7月7日訂正:次の赤字部分を付け加えました。これがないと「二億二百万」などで4桁余分の0が入ってしまいます。
# 欠けている桁をゼロとして復活させる
s/(?<=兆)(?![一二三四五六七八九][十百千万]?億)/〇億/g;
s/(?<=億)(?![一二三四五六七八九][十百千]?万)/〇万/g;
*7月8日補正:単位語のうち兆億万は残して、ゼロの羅列を減らしました。
*7月9日訂正:億万でゼロを整理のところの2行目で洋数字の0は間違いで漢数字の〇にしないといけませんでした。
# 億万でゼロを整理
s/〇〇〇〇[億万]//g;
# s/(?<=[兆億万])0+//g; #誤
s/(?<=[兆億万])〇+//g; #正
0 件のコメント:
コメントを投稿