1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

小書きのルビを大書きに置換する

1
Posted at

 日本の本のルビ(ふりがな)の文字には出版社や時代ごとに2つに大別されるルールがあります。「小書きのカナをそのまま使う」か「大書きのカナに変換して入れる」かです。大書きルールの場合には拗音・促音を「っ」→「つ」のように置換して入れます。これは元々は活版の時代にルビサイズの小書きのカナは潰れてしまって読めなくなる懸念があったことからできたルールではないかと推測しているのですが、現在のように印刷技術が発達してサイズの小さな文字でも十分な可読性が得られるようになっても依然として「大書きのカナに変換して入れる」ルールは残っていたりします。EPUBでも場合によっては要求されますので、機械的に処理できないかと思い、Xhtml内でのルビを対象とした小書きのカナ→大書きのカナの置換スクリプトをPerlで書いてみました。

#! /usr/bin/perl
use utf8;
use Encode qw/encode decode/;

# 変換Textファイルのパスを取得
$convertTextFilePath = $ARGV[0];
$convertTextFilePath = decode('UTF-8', $convertTextFilePath);

# 各テキストファイルを展開、置換
	open(IN,"$convertTextFilePath");
		@importedTxts = <IN>;
		$importedTxt = join("",@importedTxts);
		$importedTxt = decode('UTF-8', $importedTxt);
	close (IN);
	#置換処理
	my $replacedTxt = & textReplace ($importedTxt);
	#出力
	$replacedTxt = encode('UTF-8', $replacedTxt);
		open(OUT,"> $convertTextFilePath");
		print OUT $replacedTxt;
	close (OUT);
exit;

sub textReplace {
	#置換テキストの取得
	my $targetText = $_[0];
	my @rtBlocks;
	@rtBlocks = $targetText =~ m/<rt>[^<>]+?<\/rt>/g;
	foreach $rtBlock(@rtBlocks){
		my $rtBlockConverted = $rtBlock;
		$rtBlockConverted =~ tr/ぁぃぅぇぉゕゖっゃゅょゎァィゥェォヵㇰヶㇱㇲッㇳㇴㇵㇶㇷㇸㇹㇺャュョㇻㇼㇽㇾㇿヮ/あいうえおかけつやゆよわアイウエオカクケシスツトヌハヒフヘホムヤユヨラリルレロワ/;
		$targetText =~ s/$rtBlock/$rtBlockConverted/g;
	}
	return $targetText;
}

ターミナルで

perl このスクリプトのパス 処理対象ファイルのパス

の順で指定すれば処理されます。

変換された

 こんな感じ。

 なお、小書きのカナ→大書きのカナの場合には自動で処理できますが、大書きのカナ→小書きのカナの場合は小書きにしていい文字なのかそうでないのかの推測が機械的にはできませんので位置を特定しての手作業になるかと思っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?