Semantic Scholarという論文検索サービスがあり、検索結果のランキングにはAIが使われているらしい(Building a Better Search Engine for Semantic Scholar)。ちなみにこのサービスを運営しているのはAllen Institute for AIで、マイクロソフトの共同創業者だった故ポール・アレン氏が設立した研究機関。このサービスにはAPIがあるので、このAPIを利用してPythonで論文検索をしてみる。
環境
Semantic ScholarのAPIについて
Semantic ScholarのLiterature Graph Service (1.0)を使って論文を検索する。このAPIのsearchエンドポイントではキーワードで論文を検索できる。レートリミットは5分間で100リクエストで、登録すればレートリミットを上げることができるらしい。ここでは登録せずに使う。「python」というキーワードで検索するには次のURLにアクセスする。
https://api.semanticscholar.org/graph/v1/paper/search?query=python
ブラウザでアクセスすると、以下のような結果が表示される。paperIdはSemantic Scholarで使われる論文ごとのID。
PythonとAPIで論文を検索する
デフォルトで取得できる論文情報は論文タイトルとAPIで論文詳細を取得するときなどに使える論文ID(paperId)だが、fieldsパラメータを使うと他の項目も取得できる。ここでは次の項目を取得する。
- title:タイトル
- year:年
- referenceCount:参照数
- citationCount:引用数
- influentialCitationCount:影響力のある引用数? 機械学習で算出されたものらしい(What are Highly Influential Citations)
- isOpenAccess:オープンアクセスかどうか
- fieldsOfStudy:研究分野
- authors:著者
キーワード「python」で検索するPythonコードは以下の通り。最大取得件数を10に制限してある。
import requests import json endpoint = 'https://api.semanticscholar.org/graph/v1/paper/search' keyword = 'python' fields = ('title', 'year', 'referenceCount', 'citationCount', 'influentialCitationCount', 'isOpenAccess', 'fieldsOfStudy', 'authors') params = { 'query': keyword, 'fields': ','.join(fields), 'limit': 10 } r = requests.get(url=endpoint, params=params) r_dict = json.loads(r.text) total = r_dict['total'] print(f'Total search result: {total}') data = r_dict['data'] for d in data: print('---------------') for fi in fields: if fi == 'authors': print(f'{fi}: {list(map(lambda a: a["name"], d[fi]))}') else: print(f'{fi}: {d[fi]}')
以下のように論文情報が取得できた。
0 件のコメント:
コメントを投稿