古書3 ~本文・ルビ~
※小説家になろうで『外見上正しく』表示させるために、一部、厳密にはルビの形式が違います。外見上と、コピペした場合は問題ありません。多分。
ある人が中二病を心の中で飼っているかどうかは、その人が使うルビを見れば分かると思います。(挨拶)
私ですか? 心の中の何割かは中二病の支配領域ですね。
そうでなくて『"病毒の王"』に、『ロード・オブ・ディジーズ』というルビは振れないと思うんですよ。
そんなわけで、今日はルビについて見て行きます。
・ルビの形式
『小説家になろう』のルビは、『青空文庫』と形式を同じくします。
一部の記号をルビ用に割り振って制御していて、そんなに難しい事はない。
……問題は、『LibreOffice Writer』とは形式が違うという事でしょうか。
「病毒の王」(EX)において、本文中に使われているルビは「1553」個。
手作業でも、「できるか」「できないか」と言えば、間違いなく「できる」。
「現実的か」「現実的でないか」と聞かれても、「現実的」。
「やりたいか」「やりたくないか」で言えば「やりたくない」。
……さすがにちょっと。
無味乾燥な単純作業の繰り返しも割と好きなんですけど、多分働いてる気分がするだけで、生産性が低い。
二回目があるかは分かりませんが、延々と手作業をし続けるには……こう、さすがにつまらない作業。
やすりがけとかは、その微妙な手作業がうんぬんかんぬんと理論武装できるのですが、デジタルなので、努力と結果の間に、相関性がない。
そんなわけで、ここから楽をするための努力が始まります。
・ルビを一括で振る方法
調べてみると、青空文庫形式のルビを『LibreOffice Writer』で一括変換するのをやっている人もいました。
こういう、自分がやってみた作業を丁寧にまとめてくれているの嬉しいですね。
先行研究を踏まえて実験できると、ものすごーく楽です。
読み込み中……。
…………。
……。
――なるほど。
形式を「.fodt」にして。
青空文庫形式のデータから「ルビの正規表現を抜き出し」て。
「sedで置換」すればいいのか。
呪文?
……なろう風に言えば、転生チート持ちに、あっさり高等呪文を詠唱短縮とか、詠唱破棄された現地人モブの気持ち。
そりゃ分かる人は分かるでしょうけど、私ウィザードじゃないんで。
とは言え、日本語としてちゃんとしているので、言っている事は分かる。
概念も分かる。
でも、分かればできるとは限らない。
……こういう時は発想の転換ですね。
多分この人は、スマートに行おうとしている。
「すべてのルビを」「例外なく」「ルールに則って」「一括で処理」するための技術。
自分でもこういうのをさらりとできたらいいなー、と思うのですが。
……それが必要かと言うと、そうでもない。
「全部手作業よりは楽に」「Writer形式でルビが振られたという結果」があれば、それでいい。
そもそも、こういうスマートな一括処理技術が最も輝くのは「ルビの表記が多岐に渡り」「どんなルビが振られているか分からなくて」「継続的に同様の処理をし続けたい」場合。
今回は「よく使うルビは決まっていて」「どんなルビが使われているか大体分かっていて」「とりあえず一回できればいい」。
自分で書いた小説ですもの。
どうせ「"病毒の王"」とか「黒妖犬」とかが沢山使われてるに決まってる。
(※後述しますが「"病毒の王"」が469個で、ほぼ三分の一でした)
……よし。技術向上の機会は捨てよう。
スマートな技術は欲しい。それができる自分に憧れる。
よく分からない事を、よく分かるようになりたいという気持ちがある。
……でも、技術習得に掛かる時間というものを甘く見積もってはいけない。
結論:特定単語を置換すればそれでOK
当然漏れるルビもあるのですが、一度しか使われない例外的な文章表現は、むしろ手作業の方が安全。よし、それで行こう。
・ルビ構文チェック
『LibreOffice Writer』と『小説家になろう』のルビ形式は違うのですが、共通している事もあります。
それは、言語で制御されている事。
なので内部を覗くために、『LibreOffice Writer』で作ったファイルを形式をデフォルトの拡張子「.odt」から「.fodt」にして保存します。
fはフラットのFらしい。
この形式でも、『LibreOffice Writer』では普通に開けますが、逆に言えば普通にしか開けないので、他のテキストファイルで開かないといけません。
(※今回は『TeraPad』を使用。)
テストはシンプルに、が基本です。
よって今回は『黒妖犬』一単語のみを、それぞれ『小説家になろう』形式のルビと、『LibreOffice Writer』形式のルビで記入し、「.fodt」形式で保存したファイルを作り、これを比較します。
ちなみに黒妖犬は、『病毒の王』の1話から登場して、タグ(キーワード)の「もふもふ・モフモフ」を一手に担っています。
比較するのに『Rekisa』を使用。
「テキスト差分表示ソフト」ですね。
これを使うと、こんな感じになります。
膨大なテキストですが、惑わされてはいけません。
『Rekisa』は、「テキスト差分表示ソフト」です。
必要なのは差分のみ。
つまり、記入されている文章が違う所だけです。
(※スクリーンショットで緑色になっている所)
・『小説家になろう』形式
<text:p text:style-name="P4">|黒妖犬《バーゲスト》</text:p>
・『LibreOffice Writer』形式
<text:p text:style-name="P18"><text:ruby text:style-name="Ru1"><text:ruby-base>黒妖犬</text:ruby-base><text:ruby-text>バーゲスト</text:ruby-text></text:ruby></text:p>
格段にテキストが長くなっているのが分かりますね。
以上のテスト結果を踏まえますと――
「.fodt」形式で、内部の該当箇所を全て一括で書き換えてやればいいのさ……! 理論でいいでしょう。
・調査
とりあえず頻出するルビを精査して、それをカバーする。
調査は大事。
独断と偏見で、「件数が多そうなルビ」をピックアップして並べてみる。
分量の問題で、とりあえず上位3件のみ。
件数順(上位3件)
469件
"病毒の王"
204件
黒妖犬
134件
不死生物
1553件中、上位3つで807件をカバー。
他もまとまった数があるので、ある程度一括置換できれば、純粋な手作業よりも、はるかに効率アップを図れそうですね。
・ルビ一括置換
まず、ルビを定義している構文を改めて抜き出す事に。
・『小説家になろう』形式
<text:p text:style-name="P4">|黒妖犬《バーゲスト》</text:p>
↓
|黒妖犬《バーゲスト》</text:p>
「 <text:p text:style-name="P4">」のP4がいったい何を定義しているのか……実は分かってない。
ただ、置換時に取り除いてもよさそうだったって言うか……。(アバウト)
ブラックボックスの中を覗いているのに、まだブラックボックスが黒々と広がってるのマトリョーシカ感ある。
・『LibreOffice Writer』形式
<text:p text:style-name="P18"><text:ruby text:style-name="Ru1"><text:ruby-base>黒妖犬</text:ruby-base><text:ruby-text>バーゲスト</text:ruby-text></text:ruby></text:p>
↓
<text:ruby text:style-name="Ru1"><text:ruby-base>黒妖犬</text:ruby-base><text:ruby-text>バーゲスト</text:ruby-text></text:ruby></text:p>
やっぱり前半部分を取り除いてもなんとかなる気がする。
……というのを踏まえて、一括置換テストを行います。
ちなみに言うまでもないような気がしますが、複製できる時は実験用のファイルを別に用意しましょう。
複製できない時は、全てを賭けましょう。
賭けに負けたら死、それが戦場の常識です。
やな常識だ。
|黒妖犬《バーゲスト》</text:p>
↓
<text:ruby text:style-name="Ru1"><text:ruby-base>黒妖犬</text:ruby-base><text:ruby-text>バーゲスト</text:ruby-text></text:ruby></text:p>
テキストソフトから一括置換……。
置き換えますか? → 「はい(Y)!」
よし、行った!
ルビも振られてるし、ちゃんと『LibreOffice Writer』で開ける。
……そしてふと気付く。
ルビの配置が違う……。
ルビの配置が、そうなって欲しい「121」ではなく「左」(デフォルト)になっている……。
(※「121」は、下の文字に対応してルビの幅を調整する方式。「左」は左側に寄っている方式)
なぜ……? 「.fodt」形式で同じ事書いてあったら同じはずだよね……?
定義するための構文をコピーできていなかった?
じゃあ、どこに書き込まれてるんだ……。
……『どこか』に定義されているはず。たすけてRekisa。
ルビの配置だけを変えた「.fodt」形式の文書二つを用意します。
Rekisaを使って、それらの文書を、じっと見比べていく。
……見つけた。
・ルビ配置「左」
<style:style style:name="Ru1" style:family="ruby">
<style:ruby-properties style:ruby-align="left" style:ruby-position="above" loext:ruby-position="above"/>
・ルビ配置「121」
<style:style style:name="Ru1" style:family="ruby">
<style:ruby-properties style:ruby-align="distribute-space" style:ruby-position="above" loext:ruby-position="above"/>
どうも『LibreOffice Writer』は、文書単位でルビ配置を定義しているらしい。
この前に、一つ、同一ファイル内でルビの配置を変えてみるテストをしていて、その違いが「Ru1」と「Ru2」だけだったので、「左」の配置が1で、「121」の配置が2なのかな? と思っていたのですが、多分順番に割り振られている。
そしてここで分かる事は、「ルビポジション(ruby-position)」が、
「"left"」で「左」。
「distribute-space」が「121」。
……という事でしょうか。
さらに混在する場合、多分Ruのナンバリングでそれぞれに対応している……と。
(※ルビの配置は「左」、「中央」、「右」、「010」、「121」の五種類なので、理論上、Ruは5まで生成されるはず)
なるほ……ど? (今でもよく分かってない)
でも、現物があって、中身を壊さないで覗けるなら色々な事が分かるものです。
分からない時もあるけど……。
いっぱいあるけど……。
分からない時の方が多いけど……。
『動けばいい』。――それが、ブラックボックスを使う時の鉄則です。
……原理の分かっていない物を無闇に使うと、大抵はどこかで大失敗するものと相場は決まっていますが、まあそういうお約束からは目をそらしましょう。
手順を簡単にまとめると……。
1. 『小説家になろう』形式でルビが振られたテキストを、『LibreOffice Writer』(「.fodt」形式)で保存する。
2. 『LibreOffice Writer』(「.fodt」形式)で、一つルビを振って、「Ru1」を定義する。(望む方式で。私の場合は「121」)
3. 一単語ごとに、テキストファイルでルビ形式を一括変換する。
参考例は既出ですが以下。
「黒妖犬」という一単語を変換する例です。
|黒妖犬《バーゲスト》</text:p>
↓
<text:ruby text:style-name="Ru1"><text:ruby-base>黒妖犬</text:ruby-base><text:ruby-text>バーゲスト</text:ruby-text></text:ruby></text:p>
4. ルビを振りたい単語を、全部同様の手法で変換する。
プログラミング界隈では、「かろうじて動いているけれど中身がひどい」コードの事を『ゾンビコード』と呼ぶそうです。
……うちのはゾンビですらないな。動いてないもの。
でもオートでなくて、複数動作を経由しての手動でも、オール手作業よりはマシだと思うんですよね。
ちなみに、使用回数6件以上のルビを変換していて、使用回数5件以下のルビは手動です。
調べ物とテストに掛かった時間でルビ振りぐらい、オール手作業でも終わらせられたのでは? という素朴な疑問から目をそらすのがコツです。
……二回目をやるなら、今回のテストで得たデータにも意味があるのですが。
次は、最初からこのデータを使って、大幅な時間短縮を行えるので。
でも、二回目……あるかな。
……それに、別の機会があったら私、次はまた違うテストをやってるような気もする……。
望んで地獄を求めてるような気もしてきた。
ルビ振りをはじめとするデジタル作業で、ほんのりとデジタル地獄を垣間見たので、次回は「古書4 ~本文・印刷~」で、アナログ地ご……作業です。




