memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

英語論文のPDFファイルを日本語PDFに変換するワークフロー(macos)

前置き

macosにはコンピュータ操作を自動化するAutomatorってのがあります.便利なやつです.

文献調査してて,英語論文を大量に読まなければならくなり,少しは早く読めるようにはなったと思いますが,日本語に比べると半分以下,しかもザッピングがしにくいので日本語なら全部読まなくても流し読みができる利点があります.それでも訓練と思って原文で読もうとしてきたのですが,やはり時間がもったいない.

最近,Webの記事ももっと量を読みたくていままで使わないできたGoogle翻訳機能を使うようになりました.不自然な文ではありますが,それでも英語のまま読むより断然早く短時間で読めます.これはやはり大きい.読みにくいと感じたところだけ原文で読めばいいと思うようになりました.

英語論文はHTMLもありますが多くがPDFで提供されています.HTMLであればGoogle翻訳(もしくはDeepL)を使えば何も考えずに日本語にできるのですが,PDFはそうはいきません.テキストだけコピペして変換する手はありますが,論文の場合は図表がありますから,原文のどこを読んでいたのかが大事になったりするんです.

形式をできるだけ保ったまま日本語PDFに変換するのは...調べた限りではMS-Wordを使う方法でした.Googleドキュメントでもできるんですがやはり形式が崩れてしまいます.ここは惜しいところで.手順は公式に解説ページがありますのでそちらをどうぞ.もっとわかりやすく説明してくれているYouTuberもいると思いますので適当にググってください.

support.microsoft.com

さて.

MS-WORDの翻訳機能でPDFを日本語化できたのですが,ちょっと手順が必要なんですね...上記の通り.1PDFあたり30秒くらいはかかっちゃう感じです.どうせなら,複数のPDFファイルを一気に処理してくれたら...コンピュータさん素敵って感じがしてきますね.

ということで,どうやるか...今日,昼くらいからアレコレ試行錯誤していました.論文も提出して今日は学内講演会だけだったので時間があったので.

候補1 VBA ⇒ ダメでした.マクロ記録したんですが翻訳メニューは自動化の対象外のようです.

候補2 Python ⇒ VBAがダメなら無理でしょう.PythonでWordの文書を作成したり操作するライブラリはあるにはありましたが,翻訳みたいな拡張機能までは対応していないようでした.

候補3 Automator ⇒ MS-WordがそもそもAPIを提供していないなら,操作を記録して再生するようなRPAツールしかもうないと思ったんですね.RPAツールも探しましたが有料のものがほとんどで,無料のものもなんかビジネスっぽくて使い方が解説されていません.MacならもうAutomatorしかないな,と思ったんです.

やってみると,とりあえず翻訳ツールを操作するところまではできました.アプリケーションにキーコードを送ることで操作ができます.カーソルキーとかエンターキーとかです.ここからが...3時間以上かかったような気がします.今,20:45です.講演会が終わったのが16時くらいだったので...何と戦っていたかといえばApple Scriptです.Automatorではブロック(パッチ?)ベースで処理フローを定義できるのですが,細かい処理はコードを書かないと実現できないんですね...それを記述するのがApple Scriptでした.何回か触ったことはありましたが癖が強い言語で...英語圏の方はスムーズに理解できるんでしょうね.いやはや...3〜4時間の試行錯誤はもう書きませんが...大変でした.

本題

以下,Automatorでの作成手順です.興味のある方は作ってみてください.僕はmacos 13.2.1で,Wordは16.70と書いていました.これ以外の環境では試していませんので...あしからず.

(1)Automatorを起動して,左上のワークフローを選択します.で,以下のように,「Finder項目の選択を求める」を左から右にドラッグ&ドロップし,複数選択を許可をチェックしてください.つづいて,「AppleScriptを実行」を同じく左から右にドラッグ&ドロップしてから,以下のコードを中にまるごと上書きしてください.あちこちのサイトから持ってきたコードです.とりあえず動くレベルですので...ご容赦を.

use scripting additions

on run {input, parameters}
    repeat with aFile in input
        tell application "System Events"
            set fname to aFile as text
            set inputFile to disk item fname
            set tmp to ((path to desktop folder as text) & "tmp.docx")
            set outpath to text 1 thru ((offset of "." in fname) - 1) of fname & "_.pdf"
        end tell
        
        tell application id "com.microsoft.Word"
            activate
            open aFile
            tell active document
                delay 10 -- PDFを読み込むのに時間がかかる場合がある(失敗するときは長くする)
                tell application "System Events" to if (exists file tmp) then delete file tmp
                save as it file name tmp
            end tell
            tell application "System Events"
                keystroke "t" using {command down, option down, control down}
                delay 5
                keystroke (ASCII character 29)
                delay 0.5
                keystroke return
                delay 0.5
                keystroke tab
                delay 0.5
                keystroke tab
                delay 0.5
                keystroke tab
                delay 0.5
                keystroke tab
                delay 0.5
                keystroke return
                delay 10 -- 英語⇒日本語変換待ち(失敗するときは長くする)
            end tell
            set activeDoc to active document
            save as activeDoc file name outpath file format format PDF
            delay 0.5
            close active document saving no
            delay 0.5
            close active document saving no
        end tell
    end repeat
    
    tell application "System Events" to if exists file tmp then delete file tmp
    return input
end run

あと最近のmacosはアプリが計算機資源にアクセスする許可を与えないと動作しない(セキュアにするため)ので,以下のように,プライバシー>入力監視を選択して「+」を押して「スクリプトエディタ」を追加してください.これでMS-WORDに対してキー操作ができるようになります.

はい,あとは実行している様子をデモしましたので,よければ見てくださいね.

でわでわ,うわ,バスの出発まであと10分.帰らないと...

youtu.be