※この記事では『「ほん訳コンニャク」 を食べて 論文を読もう』で紹介している Translation-Gummy(ほん訳コンニャク)の導入方法を解説しています。「Translation-Gummy(ほん訳コンニャク)?何それ美味しいの??🤔」という方は、上記の記事を覗いてみてください🙇♂️
はじめに
「英語論文のURL(or PDF)を投げれば日本語翻訳付きのPDFを生成する」という機能のウケが良かったようで、想像以上の数の方々に Qiita記事 や Tweet を見ていただいたり、Github や PyPI から実際にインストールして使っていただけているようです。ありがとうございます🙇♂️
お陰様で、エンジニア以外の方々の耳にも情報が届いたらしく、「今までプログラミングや Python を触ったことがないのだけど、これを機に触ってみたいと考えていて…〇〇について教えていただけませんか?」といった嬉しい声もいくつかいただきました。
非常にありがたいお言葉ですし、開発者としての責任もあるので、微力ながらお力添えをしたいと思い、この記事を書くに至りました。ここでは、「インストールしてURLからPDFを生成する」までの流れを解説したいと思います。(エラーが出る箇所や不明な点ありましたら、コメントや DM 等で指摘していただけると幸いです。)
※ これ以降
$
の後に出てくる文字はコマンドと呼ばれる命令文であり、ターミナル(Mac) /コマンドプロンプト(Windows) 上で実行するものになります。
"#"で始まる行は説明文です。
ex.)
$ python3 -c 'print("Hello World!")'
Hello World!
## Python
Pythonの環境構築・セットアップに関しては、非常にたくさんの解説記事が出ているため、ここでは参考記事[^1]を挙げるだけにさせていただきます。なお、<b>「Mac/Linuxの場合、システムデフォルトでPythonが入っている[^1]」</b>ので、<b><font color="red">面倒な方は特別なことはせず、デフォルトのPythonを使っていただいても構いません。</font></b>
[^1]: [『Pythonを書き始める前に見るべきTips』> Pythonのセットアップ > Pythonの導入](https://qiita.com/icoxfog417/items/e8f97a6acad07903b5b0#python%E3%81%AE%E5%B0%8E%E5%85%A5)
## Translation-Gummy
導入方法は <a href="https://github.com/iwasakishuto/Translation-Gummy#installation"><font color="#333333"><b>Github</b></font></a> に書いてあるので、そちらに従って [`wkhtmltopdf`](#wkhtmltopdf), [`webdriver`](#webdriver), [`Translation-Gummy`](#pypi)(Python package)をインストールしていきます。
### 依存ツール
#### wkhtmltopdf
論文の内容を取得、翻訳した後PDFを生成する過程で、<b>「HTMLでレイアウト→PDFを生成」</b>ということをしているのですが、それに必要なのが <b><a href="https://wkhtmltopdf.org/index.html">wkhtmltopdf</a></b> になります。[このダウンロードサイト](https://wkhtmltopdf.org/downloads.html)から、自分のPCのOS/Distributionにあったものをダウンロードしてください。
なお、コマンドでインストールする場合、以下のコマンドでインストールできるかと思います。
```sh
# Debian/Ubuntuの方:
$ sudo apt-get install wkhtmltopdf
# macOSの方:
$ brew install Caskroom/cask/wkhtmltopdf
いずれの方法でインストールしたとしても、以下のコマンドで google.pdf
が作成できればセットアップは完了です。
$ wkhtmltopdf http://google.com google.pdf
webdriver
chrome driverを使う場合は、この記事1が参考になるかと思います。なお、その場合、以下のコードが通ればセットアップは完了です。
$ pip3 install selenium
$ python3
>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get("https://www.python.org")
>>> driver.save_screenshot('screenshot.png')
True # Trueと出れば、セットアップは完了です。
PyPI
$ pip3 install Translation-Gummy
このコマンドだけで、Translation-Gummy を動かすのに必要な Python Package は全てインストールされます。なので、これだけで大丈夫です。
PDF生成
Python 実行
ここまでで、「英語論文のURL(or PDF)を投げれば日本語翻訳付きのPDFを生成する」という当初の目的は達成されます。
# ">>>" 以降をコピペしてください。
$ python3
>>> from gummy import TranslationGummy
# 1つでも[success]と出ていればセットアップ成功です。
>>> gummy = TranslationGummy(gateway="useless", translator="deepl")
# "DRIVER_TYPE: None" と出た場合、webdriverの設定にミスがあることを意味しています。
>>> pdfpath = gummy.toPDF(url="https://www.nature.com/articles/ncb0800_500", path="sample.pdf", delete_html=True)
# PDFを生成するまでのログが出ます。出力が多いと感じた場合、一つ前で
# gummy = TranslationGummy(gateway="useless", translator="deepl", verbose=False, translator_verbose=False)
# とすれば、出力される情報が少なくなります。
>>> print(pdfpath)
sample.pdf
コマンド実行
しかし、毎回Pythonを実行して、上記のコードをコピーするのは面倒ですよね…。ということで、ターミナル(Mac) /コマンドプロンプト(Windows) 上から直接実行できるようになっています!
$ gummy-journal "https://www.nature.com/articles/ncb0800_500"
だけ覚えれば大丈夫です!🙌
【任意】 Gateway と 環境変数
Gateway と 環境変数のセットアップ方法
現在対応しているGatewayサービスは、こちら (gummy.gateways.UTokyoGateWay
) だけなのですが、自身のGatewayサービスを間に挟むことで、有料ジャーナルからも全文取得することができるようになります。
この時、以下のように毎回 <USERNAME>
と <PASSWORD>
を入力するのは面倒です。
>>> gummy = TranslationGummy(gateway="utokyo", translator="deepl")
# 以下のように、<USERNAME> と <PASSWORD> を入力する必要があります。
>>> pdfpath = gummy.toPDF(url="URL", username="<USERNAME>", password="<PASSWORD>")
そこで、環境変数に値を保存できるようにしています。(セキュリティ的にあまり推奨された手段ではありませんが…)とはいえ、PC全体の環境変数に書き込んでしまうと、他のシステムで問題が起きる可能性もあるので、Translation-Gummy 用の環境変数ファイルを用意します。(import gummy
時に自動的に作成されています。)
$ python3
>>> from gummy.utils import where_is_envfile, show_environ, write_environ
# 環境変数が書き込まれているファイルがある場所を示します。
>>> where_is_envfile()
'/Users/iwasakishuto/.gummy/.env'
# 上記のファイルに、値を書き込みます。
>>> write_environ(
... TRANSLATION_GUMMY_GATEWAY_UTOKYO_USERNAME="<USERNAME>",
... TRANSLATION_GUMMY_GATEWAY_UTOKYO_PASSWORD="<PASSWORD>",
>>> )
# 実際に書き込まれたか、確認します。
>>> show_environ()
TRANSLATION_GUMMY_GATEWAY_UTOKYO_USERNAME = "<USERNAME>"
TRANSLATION_GUMMY_GATEWAY_UTOKYO_PASSWORD = "<PASSWORD>"
これで、以降は以下のように と を入力せず、Gatewayサービスを利用できるようになります。
>>> gummy = TranslationGummy(gateway="utokyo", translator="deepl")
# 以下のように、<USERNAME> と <PASSWORD> を入力する必要がありません!!
>>> pdfpath = gummy.toPDF(url="URL")
※環境変数の命名規則ですが、以下のように設定しています。
>>> ENV_VARNAMES = "TRANSLATION_GUMMY_{1}_GATEWAY_{2}"
# 1 = Uppercase of class name without 'GateWay'
# 2 = varnames, which is also the key of `gatewaykeywargs`
おわりに
- 〇〇についてもう少し詳しく書いて欲しい。
- ここに書いてあることをやったのに動かない!!
- 使ってみたけど、読みたいジャーナルがサポートされてない!!
(現在サポートしているジャーナルは ここ から確認できます。)
などなどありましたら、コメントや DM 等で指摘していただけると幸いです。