researchmapとjqで研究等業績入力表をつくる

中部大学の教員は年度ごとに「研究等業績」を大学に報告します。発表論文をその書式に合わせて出力するのが面倒ということで、ツールの活用を考えます。
researchmapは研究者の情報を集めたサイトで、アカウントがあれば業績を記録しておくことができます。論文の情報もPubmedやWeb of Scienceから取り込むことができるのが素晴らしい(いちいち入力する必要がない)。さらにいいのがデータのエクスポートができ、かつJSONで出力されることです。
JSONのデータはそのままでは読みにくいですが、構造化されているのでプログラムを書けば加工がしやすいです。でもいちいちスクリプトを書くのも面倒です。そこでjqというソフトを使います。やってみましょう。

  1. サンプルデータをダウンロードします。

jsonはjqに標準入力から渡します。ファイル名を指定する方法もありますが、コマンドが読みにくくなるのでパイプを使ったほうがいいです。

$ cat rm_sample.jsonl | jq 
{
  "insert": {
    "type": "researchers",
    "id": "B000335053"
  },
(以下省略)

researchmapのデータには論文とは関係ないものがあるので論文のデータだけにします。論文はtypeがpublished_papersになっているのでその条件に合致するものだけを出力します。

$ cat rm_sample.jsonl | jq '.|select(.insert.type=="published_papers")'
{
  "insert": {
    "type": "published_papers",
    "id": "12974385",
    "user_id": "B000335053"
  },
(以下省略)

とりあえず、論文のタイトルを抽出します。タイトルはmergeのpaper_titleのen(英語)にあるので、その値を取り出すために .merge.paper_title.enとします。
このままだと"でくくられて使いにくいので、jqの-rオプションをつけます。

$ cat rm_sample.jsonl | jq -r '.|select(.insert.type=="published_papers")|.merge.paper_title.en'
jq
Arabidopsis thaliana NGATHA1 transcription factor induces ABA biosynthesis by activating NCED3 gene during dehydration stress.
High-Quality Genome Sequence of the Root-Knot Nematode Meloidogyne arenaria Genotype A2-O.
Auxin decreases chromatin accessibility through the TIR1/AFBs auxin signaling pathway in proliferative cells
(以下省略)

これに雑誌名(publication_name)をつなげます。[]でくくることで配列になります。

$ cat rm_sample.jsonl | jq -r '.|select(.insert.type=="published_papers")|.merge|[.paper_title.en, .publication_name.en]'
[
  "Arabidopsis thaliana NGATHA1 transcription factor induces ABA biosynthesis by activating NCED3 gene during dehydration stress.",
  "Proceedings of the National Academy of Sciences of the United States of America"
]
(以下省略)

ボリュームを空白でつなぎます。

$ cat rm_sample.jsonl | jq -r '.|select(.insert.type=="published_papers")|.merge|[.paper_title.en, .publication_name.en+" Vol."+.volume]'|head
[
  "Arabidopsis thaliana NGATHA1 transcription factor induces ABA biosynthesis by activating NCED3 gene during dehydration stress.",
  "Proceedings of the National Academy of Sciences of the United States of America Vol.115"
]
(以下省略)

さらにページと発表日を加えます。

$ cat rm_sample.jsonl | jq -r '.|select(.insert.type=="published_papers")|.merge|[.paper_title.en, .publication_name.en+" Vol."+.volume+" pp."+.starting_page+"-"+.ending_page, .publication_date]'|head
[
  "Arabidopsis thaliana NGATHA1 transcription factor induces ABA biosynthesis by activating NCED3 gene during dehydration stress.",
  "Proceedings of the National Academy of Sciences of the United States of America Vol.115 pp.E11178-E11187-",
  "2018-11-20"
]
(以下省略)

タブ区切りテキストで出力します。

$ cat rm_sample.jsonl | jq -r '.|select(.insert.type=="published_papers")|.merge|[.paper_title.en, .publication_name.en+" Vol."+.volume+" pp."+.starting_page+"-"+.ending_page, .publication_date]|@tsv'|head
Arabidopsis thaliana NGATHA1 transcription factor induces ABA biosynthesis by activating NCED3 gene during dehydration stress.       Proceedings of the National Academy of Sciences of the United States of America Vol.115 pp.E11178-E11187-    2018-11-20
(以下省略)

この出力をファイルに保存し、Excelで最後の仕上げをします。