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に制限してある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import requests import json 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 件のコメント:
コメントを投稿