【爆速化】正規表現を使ってPDFの改行を一気に削ろう!【最終章】

割引あり

サマリー

  • 置換の結果、最終的に英文が段落単位の文章になっていればよい

  • そのため、PDFリーダーからコピーしたテキストを正規表現により置換処理で改行を一定のルールで削る

  • その結果をDeepLなりGoogle翻訳なりで訳してGoogle DocumentやMicrosoft Word、人によってはNotionやマークダウン形式テキストにまとめて保存していく


久しぶりのご挨拶

最近めっきりこちらで記事を書かず、Youtubeでの配信にかまけているmashです。だいぶチャンネル登録者も増えてきて(2ヶ月で40人なら満足いく数ですよ、このテーマなら)割と上機嫌ですが課題も多いです。
配信で語ってきたことをこちらのnoteでまとめてアウトプットしていくべきかな、とも思ってまして。
映像配信はリアルタイムで語ってコメントとやりとりする楽しみはあるのですが、情報を整理して提供することにはあんまり向いてない。テキストで整理して提供した方がいいことも多いわけです。
自分が買ったサプリメントの面白いところ、実際の運用で使ってみせるポイントなどを一応配信で語ってますが、そのまとめをボチボチ文章でもまとめようかと思っています。

正直な告白をします。この記事が面白かったと思ったり役立ったと思ったりした方は、「ハート」のマークをクリックしていただけると嬉しいです。承認欲求を満たしたい。

注意:本記事は全編無料です。応援いただけると軽率に買ったサプリメントの翻訳や利用、感想とか捗るので、ちょっと試験的に販売ボタンをつけてみます。
注意2:このページのアマゾンへのリンクは確かアフィリエイトが設定されてると思います。思いますってのは、若い頃に設定したっきり忘れてるからです。10年かけて最近500円ほど帰って来ました。素人でも時間をかけるとお金が返ってくることあるんですね、アマゾンのアフィリエイト。
注意3:最近DriveTHRU RPGのアフィリエイトプログラムにも参加しました。そのため、リンクをクリックして購入すると私に幾ばくかの謝礼が入るシステムになります。RPGのソースブックを紹介した結果手に入れた金でRPGのソースブックを買う、という永久機関を発明してノーベル賞取りたいのです。

前書き

機械翻訳爆速化"最終章"(Windows)の場合

というわけで、なぜ自分が配信という行動に踏み切ったかというと、機械翻訳を行う速度が爆発的に上がったからです。エディタの正規表現を使用した検索の速度を上げることを思案した結果、以下の3つのプロセスだけで文章は概ね読み解ける(1ページ5分前後)ところまで行ったからです。遭遇集なら15分、アドベンチャーモジュールなら1日1時間の作業でも3日ほどで身内セッションに使うことが出来ます。

  1. PDFから本文を「矩形選択」で選択してコピーする

  2. エディタにペーストして「正規表現による置換」を複数回行うマクロを組んで、段落単位の文章へ作り替える

  3. ペーストした結果を課金済みDeepLに貼り付けて読める文章に仕上げる。

  4. 文章をGoogleドキュメントやWordに貼り付けてドキュメントにしていく

このプロセスで、身内で使用するレベルなら使えます。ちょっとした遭遇集ならシチュエーションとモンスター運用を知ればいいのでまぁ5分もあれば把握可能かも知れません。
で、ここでキモになってくるのが「正規表現による置換」のプロセスです。今までいろんな手法でPDFからのコピー&ペーストによる改行潰しを試みてきました。特定のPDFリーダーじゃ無きゃ出来ないとか、表は特定のPDFリーダーじゃ無きゃ使えないとか。
でも、この手法ならいろんなことが1発解決です。それをこれから解説していきます。

推奨PDFリーダーはOkular

今回の爆速化で一番のおすすめはOkularですね。

このリーダーの利点は2つ。

利点1:「範囲選択」により、文章を概ね見たまんまのレイアウトで文字列を取得できる

PDFというファイル形式の難儀なところは、「見たまんまの段落や構成通りに文字列の塊が並んでいない」ところですね。ごく普通にテキスト選択すると、突然選択範囲が右の列に移動していたり、二段の列になっているのにテキストはこんな風に突然明後日の方向に選択範囲が飛んだりします

こんな風にね、文字列範囲だと変なところに行ってしまう

これを「範囲選択」で文字列の範囲を絞ると概ね欲しい文字列が順番通りに取れるようになります。

こうやって範囲指定にすると、だいたいこの範囲の文字列がレイアウトの順番通りに取得できる

これだけでも翻訳処理において大きな利点なのですが、更に…

利点2:「表選択」により、文章を概ね見たまんまのレイアウトで文字列を取得できる

これがね、Okularが他のPDFリーダーを超えた利点となって働くのですね。表の部分を機械翻訳にかけたい場合、例えば表のセルの中で改行されているような部分はとにかく面倒なんですよ。コピペから表を作るのは普通だとマジで面倒臭い
しかし、このOkularの「表選択」だと、コピー後Google スプレッドシートに貼り付ければそのまま表の形になる。あとはセルの中身を機械翻訳にかけてペーストすると、あっという間に日本語で読みやすい表が仕上がるって寸法です。

こんな風に、表の形のままコピーアンドペーストできる!これで2列目の文章を機械翻訳にかけてはりつけ直すと1つの表が完成するって寸法

推奨テキストエディタはサクラエディタ。

推奨のエディタはサクラエディタです。

なぜかというと、このキーボードマクロ機能を使って、複数回の正規表現置換をキー操作1つでまとめて行えるようになるからです!
サクラエディタで使う置換処理の段取りをマクロにして、それを貼り付けた文章に対して実行すると、あっという間に段落を想定した文章に仕上がるって寸法です

キーボードマクロ

"正規表現"の詳細が知りたければググれ。あるいは本を読め

正規表現とは何か、についてここでは深掘りしない。文字列解析に使うモノ、程度に覚えておけばいい。それ以上深掘りするとこれだけで教科書が一冊書けるレベルのいろいろが押し寄せてくるし、そんなの自分もよう説明できへんわ…ってなるので。

貼り付けたテキストに正規表現を用いた置換を実施する

この文字列置換だが、だいたい以下の目的がある

  • 文章を段落単位でまとめる

  • 最初から最後まで大文字で構成されている行は「見出し」と見なして改行の置換をしない

  • ハイフンで終わっている行の文字列はハイフネーションされているとみなし、置換後次の行の文字列と繋げる

ここまでやるとだいたい90%程の精度で意図通りの文章と段落が取得できる。見出しが大文字じゃない場合とか、次の行から例を提示するからと言って"(e.g."で終わってる行とかそういうのは上手く行きませんが、まぁちょっとの手直しで済む。

置換の段取り

正規表現によるPDFの改行潰し。理屈はこうです

  1. 大文字だけの行は「見出し」であるとみなして末尾にピリオドを置く(これにより改行潰しに巻き込まれない)

  2. 末尾がピリオド、!、?、:は「文の終わり」なので改行はそのまま(消したくない改行を保持するルール)

  3. 大文字小文字混じりの行でピリオドで終わってない行は「文の途中」なので改行を消す(これにより、消したい改行がだいたい潰れる)

この段取りを行うための正規表現は、以下の順で処理することになります。詳細が知りたければ自力で調べてくれ。

/* 行頭から行末まで大文字の行の後ろに.(ピリオド)をつける */
/^([A-Z,\s]+)$'/$1./
/* 行末がピリオド、?、!以外で終わっているモノは全部改行を削除する→行の続きと見なす */
/([^\.^\!^\?\s])[^\S\n\r]*\r\n/$1/
/* ハイフンとスペースで繋がっているモノは全部繋げる(ハイフネーションを繋げた結果と見なす) */
/- /''/
/* 半角中黒は全部改行を後ろにつけて箇条書きとする */
/•/\r\n•/

この処理を行えばだいたい自分の欲しい文章が手に入ります。
そして、この処理を行うキーボードマクロですが、いかにダウンロード可能な形式で用意しました。

キーボードマクロファイル

このファイルをダウンロードして、サクラエディタの「共通設定」で登録マクロにし…

改行除去のマクロをいつでも呼び出せるように登録する(この場合番号1番)

その上で、キーカスタマイズして、1回の打鍵でこのマクロを呼び出せるようにします。自分の場合は、Shift+Ctrl+Enterキーで起動するようにしています。使いやすいようにしてみてください。

キーボードマクロ設定

これで、機械翻訳に通しやすい文章に変換できると思います。PDF Readerとかも自分の使いやすいモノに差し替えてみるのもいいかもしれませんね。ここまでは自分流ですが、これを更にアレンジして貴方だけの爆速機械翻訳環境を整えてみてください。

では次回。遠くないうちに色々書くと思います。ボクも春先から新しいキャンペーンがやりたいので…

ここから先は

0字

この記事が参加している募集

仕事のコツ

with 日本経済新聞

この記事が気に入ったらサポートをしてみませんか?