今回はarXivのAPIを使って、興味ある論文を引っ張ってきたいと思います。
さらにぼくは英語が苦手なので、概要を和訳して見れるようにしていきたいと思います。
経緯
以前、Googlescholarをスクレイピングして論文を見ようとしたのですが、
- 規約でスクレイピングは禁止されていていた。
- APIもなかった(調べたがよくわからなかった)。
という感じだったので、あきらめかけていたのですが、そんなときこんな記事

自動でArxivから論文を取得して、日本語に直してLineに投稿すれば、受動的に最新情報が収集できるかも!? - Qiita
はじめに最先端の論文は知りたいけど、時間が無くて論文を読む気にならない。。。arXiv見ても英語でよくわからないから、日本語がよい。。。Slackとかよくわかんないし、Lineに通知して欲しい…
を発見し、
「そうか。APIのある論文サイト(arXiv)から論文を集めてくればいいのか。」と思い立ち、こちらを参考にやってみることにしました。
やること
やることは
- APIを取得して論文を集めてくる
- タイトルと概要(Abstract)を和訳する
- IFTTTを利用してLineに送る
- 1~3を定期的に実行する
です。
今回の記事では1.2.をやりたいと思います。
準備するもの
- jupyternotebook
今回はこれだけで十分です。
下準備
まず、必要なモジュールをインストールします。
arxiv
arXivから論文を取ってくるためにAPIのラッパーを使います。
それがこちらのarxivです。こちらでAPIを使うことができます。
インストールはいつものようにAnacondapromptから
pip install arxivでインストールできます。
googletrans
こちらは翻訳するときに使うモジュールです。こちらも同様に
pip install googletransでインストールできます。
実装
コードはこちらです。
from datetime import datetime import re from googletrans import Translator from time import sleep import arxiv # 検索ワード QUERY = "cat:'astro-ph.IM'" result_list = arxiv.query(query = QUERY,max_results=5,sort_by='submittedDate') translator = Translator() def translate_post(): title_jpn = translator.translate(title, src='en' ,dest='ja').text abst_jpn = translator.translate(abst, src='en' ,dest='ja').text print("-------"+str(count)+"ページ目-------") print("author:{}".format(author)) print(url) print("title:{}".format(title_jpn)) print("date:{}".format(date)) print("Abstract:{}".format(abst_jpn)) sleep(5) count = 1 for result in result_list: author = result.author url = result.pdf_url title = result.title date = result.updated abst = result.summary abst = abst.replace("\n","") translate_post() count += 1 print("DONE")
簡単に解説します。
解説
arxiv.query()
QUERY = "cat:'astro-ph.IM'" result_list = arxiv.query(query = QUERY,max_results=5,sort_by='submittedDate')では
arxiv.query()を使って条件に合った論文を取ってきて、result_listに代入しています。
どういう条件かというと、
- 「天体物理学の計測と方法 」のカテゴリー( cat:’astro-ph.IM’ )
- 5つの論文を取得 (max_results=5 )
- 投稿が新しい論文( sort_by=’submittedDate’ )
という条件です。詳しくはこちらをどうぞ。

PythonでarXiv APIを使って論文情報取得、PDFダウンロード | note.nkmk.me
arXivは物理学や数学、コンピューターサイエンスなどの論文が公開されているウェブサイト、プレプリント・サーバー。arXiv.org e-Print archive arXiv - Wikipedia PythonでarXiv APIを利用して論文情報(メタデータ)を取得したり、論文のPDFをダウンロードしたりする方法...
translate_post() 関数
def translate_post(): title_jpn = translator.translate(title, src='en' ,dest='ja').text abst_jpn = translator.translate(abst, src='en' ,dest='ja').text print("-------"+str(count)+"ページ目-------") print("author:{}".format(author)) print(url) print("title:{}".format(title_jpn)) print("date:{}".format(date)) print("Abstract:{}".format(abst_jpn)) sleep(5)
こちらでは
title_jpn = translator.translate(title, src='en' ,dest='ja').text abst_jpn = translator.translate(abst, src='en' ,dest='ja').textでタイトルと概要の和訳を行っています。
print("-------"+str(count)+"ページ目-------") print("author:{}".format(author)) print(url) print("title:{}".format(title_jpn)) print("date:{}".format(date)) print("Abstract:{}".format(abst_jpn)) sleep(5)こちらで結果を出力して、サーバーに負荷をかけないよう5秒停止しています。(もしかしたらいらないかも…?)
繰り返し処理
for result in result_list: author = result.author url = result.pdf_url title = result.title date = result.updated abst = result.summary abst = abst.replace("\n","") translate_post() count += 1
arxivではresult.authorのようにして、論文のデータから、得たい情報を得ることができる(この場合は著者名)のでそれを変数に代入しています。
最後にtranslate_post()を実行の実行を行っています。
それをresult_listの数だけ繰り返します。(今回は5回)
次回はLINEに送る方法を紹介したいと思います。記事はこちら。
参考

自動でArxivから論文を取得して、日本語に直してLineに投稿すれば、受動的に最新情報が収集できるかも!? - Qiita
はじめに最先端の論文は知りたいけど、時間が無くて論文を読む気にならない。。。arXiv見ても英語でよくわからないから、日本語がよい。。。Slackとかよくわかんないし、Lineに通知して欲しい…

PythonでarXiv APIを使って論文情報取得、PDFダウンロード | note.nkmk.me
arXivは物理学や数学、コンピューターサイエンスなどの論文が公開されているウェブサイト、プレプリント・サーバー。arXiv.org e-Print archive arXiv - Wikipedia PythonでarXiv APIを利用して論文情報(メタデータ)を取得したり、論文のPDFをダウンロードしたりする方法...

arXiv APIを使いこなすためのライブラリ紹介 - Qiita
arXivのAPI使いたいけどいい感じで使えそうなライブラリないかな〜と探したらありましたのでそれの紹介です。(2017/10/27追記)実際のWEBページからどの部分を取得するのか説明する項目…
コメント
[…] 前回、arXivのAPIを使って論文を取ってきて和訳を行いました。 […]