今回の記事では、arxivライブラリを用いて論文情報を取得する方法を紹介します。

今回の内容

・arxivライブラリとは

・基本的な使い方

arxivライブラリとは

arXivライブラリは、Pythonを使ってarXivのプレプリントを簡単に検索・取得できる強力なツールです。物理学、数学、コンピュータサイエンス、生物学、金融学、統計学など、さまざまな学術分野の100万以上の論文に、素早く効率的にアクセスすることができます。

このライブラリを使えば、研究者や学生は、コーネル大学図書館が提供するこの膨大な資料を存分に活用できます。最新の研究成果にすぐにアクセスでき、自分の研究や学習に役立てられます。

arXivライブラリは、検索機能やフィルタリング、論文のダウンロードに対応しており、Pythonで簡単に利用することができます。

詳細は以下のリンクからご覧ください。

これ以降、Google colab環境で実装を進めます。

基本的な使い方

導入

まず、次のコマンドを使用して ライブラリをインストールします。

!pip install arxiv

基本形

まずは基本形の紹介です。

arXivに投稿された最新の “GPT-4” に関連する論文のタイトルが最大10件表示されます

import arxiv

# デフォルトのAPIクライアントを構築する。
client = arxiv.Client()

# 検索条件を指定する。
# query: 検索キーワードを指定する。ここでは "GPT-4" を指定。
# max_results: 取得する論文の最大件数を指定する。ここでは 10 件。
# sort_by: 論文の並び替え条件を指定する。ここでは投稿日時の降順(最新順)。
search = arxiv.Search(
    query = "GPT-4",
    max_results = 10,
    sort_by = arxiv.SortCriterion.SubmittedDate
)

# 検索を実行し、結果を取得する。
results = client.results(search)

# 取得した論文のタイトルを1件ずつ表示する。
for r in results:
    print(r.title)

出力結果:

Crafting Knowledge: Exploring the Creative Mechanisms of Chat-Based Search Engines
Wisdom of the Silicon Crowd: LLM Ensemble Prediction Capabilities Match Human Crowd Accuracy
Teaching Large Language Models an Unseen Language on the Fly
On the Decision-Making Abilities in Role-Playing using Large Language Models
FOFO: A Benchmark to Evaluate LLMs' Format-Following Capability
Few-Shot Fairness: Unveiling LLM's Potential for Fairness-Aware Classification
LeMo-NADe: Multi-Parameter Neural Architecture Discovery with LLMs
Clustering and Ranking: Diversity-preserved Instruction Selection through Expert-aligned Quality Estimation
Making Them Ask and Answer: Jailbreaking Large Language Models in Few Queries via Disguise and Reconstruction
ChatSpamDetector: Leveraging Large Language Models for Effective Phishing Email Detection

論文リストを取得することができました。

詳細な検索方法

IDから論文を取得してタイトルを表示

import arxiv

# デフォルトのAPIクライアントを構築する。
client = arxiv.Client()

# ID "1605.08386v1"を持つ論文を検索する
search_by_id = arxiv.Search(id_list=["1605.08386v1"])

# クライアントを再利用して論文を取得し、そのタイトルを表示する。
first_result = next(client.results(search_by_id))
print(first_result.title)

出力結果:

HEAT-BATH RANDOM WALKS WITH MARKOV BASES

著者を指定

arXiv検索エンジンでは、各論文は複数のフィールドに細分化されており、個別に検索が可能です。例えば、論文のタイトルのみならず、著者リスト、要約、コメント、雑誌の参照情報なども検索の対象となります。これらのフィールドを検索する際には、検索語の前にフィールド名を示す接頭辞とコロンを付け加えることで、指定したフィールド内での検索が可能になります。例として、ある著者が執筆した全ての論文を検索したい場合を挙げることができます。

以下の例では、著者名に”Yoichi”と”Ochiai”の両方を含む最新の10件の記事を検索し、それらの記事のタイトルを出力します。

import arxiv

# arXivのデフォルトAPIクライアントを構築
client = arxiv.Client()

# "au:Yoichi AND au:Ochiai"をキーワードとして、最新の10件の記事を検索
# au:は著者を表し、AND条件で著者名"Yoichi"と"Ochiai"の両方を含む記事を検索
search = arxiv.Search(
   query="au:Yoichi AND au:Ochiai",
   max_results=10,  # 最大結果数を10件に設定
   sort_by=arxiv.SortCriterion.SubmittedDate  # 投稿日で結果をソート
)

# 検索を実行し、結果を取得
results = client.results(search)

# 取得した結果を繰り返し処理
for r in client.results(search):
   print(r.title)  # 各記事のタイトルとURLを出力

出力結果:

Expanding Horizons in HCI Research Through LLM-Driven Qualitative Analysis http://arxiv.org/abs/2401.04138v1
HaptStarter: Designing Haptic Stimulus Start System for Deaf and Hard of Hearing Sprinters http://arxiv.org/abs/2401.04138v1
Lottery and Sprint: Generate a Board Game with Design Sprint Method on AutoGPT http://arxiv.org/abs/2401.04138v1
Dance Generation by Sound Symbolic Words http://arxiv.org/abs/2401.04138v1
Towards Digital Nature: Bridging the Gap between Turing Machine Objects and Linguistic Objects in LLMMs for Universal Interaction of Object-Oriented Descriptions http://arxiv.org/abs/2401.04138v1
SHITARA: Sending Haptic Induced Touchable Alarm by Ring-shaped Air vortex http://arxiv.org/abs/2401.04138v1
Kuchibashi: 3D-Printed Tweezers Bioinspired by the New Caledonian Crow's Beak http://arxiv.org/abs/2401.04138v1
Deep Billboards towards Lossless Real2Sim in Virtual Reality http://arxiv.org/abs/2401.04138v1
VaxNeRF: Revisiting the Classic for Voxel-Accelerated Neural Radiance Field http://arxiv.org/abs/2401.04138v1
See-Through Captions: Real-Time Captioning on Transparent Display for Deaf and Hard-of-Hearing People http://arxiv.org/abs/2401.04138v1

次の表に、検索できるすべてのフィールドのフィールド接頭辞を示します。

prefixexplanation
tiTitle
auAuthor
absAbstract
coComment
jrJournal Reference
catSubject Category
rnReport Number
idId (use id_list instead)
allAll of the above

ダウンロード

PDFをダウンロードするには、最初に Search を実行し、次に Result.download_pdf() を使用します。

import arxiv

# デフォルトのAPIクライアントを構築する。
client = arxiv.Client()

# ID "1605.08386v1"を持つ論文を検索する
search_by_id = arxiv.Search(id_list=["1605.08386v1"])

# デフォルトのファイル名でPDFをカレントディレクトリにダウンロード
paper.download_pdf()

# カスタムファイル名でPDFをカレントディレクトリにダウンロード
paper.download_pdf(filename="downloaded-paper.pdf") 

# カスタムファイル名で指定したディレクトリにPDFをダウンロード
paper.download_pdf(dirpath="./sample_data", filename="downloaded-paper.pdf")

まとめ

この記事では、arxivライブラリを用いて論文情報を取得する方法を紹介しました。

基本的な使い方から、IDや著者を指定した詳細な検索、PDFのダウンロードまで、arxivライブラリの主要な機能を網羅的に説明しました。

これらの情報を活用することで、arXivに投稿された論文を効率的に検索・取得することができます。

最後までご覧いただきありがとうございました。