« 部分と全体 | Main | 「てにをは」と文章の肥痩 »

2017.02.15

計算して置換 和暦西暦の換算

日本語の文書を英語に翻訳するときに文中にある和暦を西暦に直さねばならないことがある。昭和20年8月15日を15 August, 1945(表記は英米でまた時代により多少違いはある)とするようなときである。

これを機械にやってもらうにはどうしたらよいか。検索と置換を使うのであるが、単に数字を転記し年月日の順番を入れ替えるだけでは年が合わなくなるので、年数の計算が必要になる。例えば昭和であれば、その年数に1925を加えて西暦とするという操作が要る。

置換のときに一緒に計算をすることができれば便利であるが、テキスト処理のエディターにはエクセルのような関数がない。さてどうするか。

仕事にはテキストエディターとして秀丸を使っているので、そのサポートフォーラムに相談をしてみた。残念ながら、replaceallの一回の置換での数値演算はできないという。

しかし検索された文字列を取得してから計算し、その計算結果を挿入するという方法を秀丸担当さんからお教えいただいた。そのマクロは以下の通りである。

setcompatiblemode 0x20000;
disabledraw;
gofiletop;
$s="昭和([0-9]{1,2})年";
while(1){
searchdown2 $s+"(?\\1)",regular;
if(result==false) break;
$found=gettext(foundtopx,foundtopy,foundendx,foundendy);
replaceup $s
,str(val($found)+1925)+"年"
,regular;
}

これを使うと昭和で記されている和暦が西暦になる。平成なら上記のスクリプトの1925の部分が1988となる。

なお和暦の表示が明治大正昭和平成ではなく、明大昭平であったりMTSHになっていることもあるので、実務で使うときには、上のスクリプトの検索条件を案件に合わせて変更したり、最初から何種類も用意しておく必要がある。1つ作ればすべてが賄えるわけではない。それは置換後の英文表記についても同様である。

年数の西暦換算だけなら以上であるが、年月日まで完全に置換で翻訳したければ、もう一度検索置換をする。上のマクロで昭和20年を1945年に直したうえで、1945年8月15日という文字列全体を対象に、従来通りの検索置換を行い15 August, 1945に直すのである。そのスクリプトは次の通り(これは1月用。2月から12月も同じように用意しておく。西暦1000年以降について対応)。

replaceall "(1|2)([0-9]{3})年1月([0-9]{1,2})日", " \\3 January, \\1\\2" , regular, nocasesense, inselect, nohilight;

処理の対象が年月だけの場合のスクリプトも加えておく。こちらについても12か月分必要になる。

replaceall "(1|2)([0-9]{3})年1月", " January, \\1\\2 " , regular, nocasesense, inselect, nohilight;

これで当初考えていた「置換の際に数値の計算をして、和暦西暦の換算のうえ、翻訳する」という作業をすべてパソコンに任せることができた。

以上、同じようなことをお考え方の参考になれば幸いです。またこれをお教えくださった秀丸エディタ&関連ソフトサポート会議室の秀丸担当さんに感謝します。

|

« 部分と全体 | Main | 「てにをは」と文章の肥痩 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference 計算して置換 和暦西暦の換算:

» 和暦を西暦に変換する秀丸マクロ [Buckeye the Translator]
ブログ「翻訳のサロン」に「計算して置換 和暦西暦の換算」という記事を書いたとSNSの翻訳者コミュニティに書かれたのを読み、そういえば似たようなものを大昔に作ったような……と思って使わなくなったマクロの... [Read More]

Tracked on 2017.02.16 05:27

« 部分と全体 | Main | 「てにをは」と文章の肥痩 »