プレプリントの論文が多く集まっている arXiv ですが、論文が多すぎて逆に目を通すのが大変... と感じたことはありませんか?
そこで、このブログの目標でもある「論文をニュースのように!」目を通せるようにしていきたいと思い、そのツールを作成していきたいと思います。今回はその 第1弾 です!
ニュースのように目を通せるようにするには、定期的に論文情報をとってくる必要がありますが、それにはどうすれば良いでしょう?
arXiv では公式のAPI が提供されているので今回の記事では、 「arXiv API の使い方」をまとめていきます!
arXivをWebページから検索して見るだけでなく、プログラムベースで情報を取得してみたいという方に必見です!
arXiv API 入門編
API の 使用は HTTPへの GET or POST リクエストによって行われていて、基本は下のような形で書かれます
search_query (検索クエリ)
検索クエリとしては、「検索対象」として何を検索するかを指定した上、:を挟んでから「検索語句」を入力することになります。(上の例だと、all (すべて)に対して、cs.CV というカテゴリに属するものから検索を行うという意味です!)
この検索対象については多くあるので、それらのPrefix とともにまとめていきます!
- ti : タイトル (Title)
- au : 著者 (Author)
- abs : 要約 (Abstract)
- co : コメント (comment)
- jr : Journal Reference
- cat : サブカテゴリー (cs.AI など)
- rn : レポート ナンバー (Report Number)
- id
- all : 上記の項目すべて
max_results (取得件数)
条件にあてはまる論文を何件取得するか?といった設定をこの部分で行えます。
例) max_result = 10
取得情報のソート順
sortBy
- relevance (デフォルト):関連度
- lastUpdateDate : 最終更新日時
- submittedDate : はじめに投稿した日付順
sortOrder
デフォルトでは、 descending (降順)になっていますが、次のようにパラメータを加えることで、昇順にできます!
sortOrder = ascending
arXiv 公式の説明は下記リンクから
https://arxiv.org/help/api/basics
手を動かして覚える!
ここまでは、API の簡単な使い方とパラメータの意味についてまとめていきました!ただ、実際に使ってみないことには理解が進まないところもあると思うので、下の問題を例に過程も含めて説明していきたいと思います!
1. パラメータ を 設定!
検索対象・検索語句
今回取得したい情報は、cs.AI のサブカテゴリーをもつ論文なので、
検索対象は cat、検索語句は cs.AI になります。
取得件数
今回は、3論文を取得するということなので、 max_result = 3
ソート順
最新更新日に近い順にソートするためには、lastUpdateDate を用い、ソート順は降順で良いのでsortOrderの設定はなしとします。
これらをまとめると、送るAPI リクエストは次の通り。
2. 論文情報 を 受け取る
arXiv の API では、Atom と RSSフィードで公開しており XMLの形式で情報を取得することができるので、これを扱いやすくするために、この記事では、" feedparser" というライブラリを使用していきます。
もし、はじめて使う方がいれば、下記のようにpipコマンドでインストールできます。
pip install feedparser
"parse" メソッドを使って、引数にリクエストのURLを渡すと、そのフィードに関する情報を取得できます!
その中でも、今回は 'entries' を用いたいのでこの要素を抽出。
import feedparser
print(feedparser.__version__) # この記事執筆時点での version は 6.0.8
d = feedparser.parse('http://export.arxiv.org/api/query?search_query=cat:cs.AI&max_results=3&sortBy=lastUpdatedDate')
entries = d['entries']
ここまで来たら、 entries[0] を出力すると、下記のように論文情報(取得した1番目の論文)が出力されることがわかるはずです!
3. 必要な情報を抽出
ここまでで論文情報を塊として受け取ることはできたので、そこから必要な情報を抜き出していきます!
論文情報自体はXML形式で、entriesの要素の中にentries[num] は num+1番目の論文情報。というように格納されているので、 それぞれentries[num]. の後に抽出したキーワードを以下のように加えることで、問題で問われていた情報を取得することができました!!
for num in range(3):
print(f'{num+1}番目の論文')
author = entries[num].author
url = entries[num].link
title = entries[num].title
date = entries[num].published
abst = entries[num].summary
cat = entries[num].category
print(f'著者 : {author}')
print(f'URL : {url}')
print(f'タイトル : {title}')
print(f'発表日 : {date}')
print(f'要約 : \n {abst}')
print(f'サブカテゴリー : {cat}')
print('\n============================================\n')
コメント