「情報管理」をkindleで読む

前に作ったJ-Stageの論文をkindleで読めるよう変換するスクリプトですがいまのところ特に問題なく使えています*1。公開後、図表等の画像もちゃんと表示するように少し手を加えました。

http://haseharu.hatenablog.com/entry/2013/03/17/071008

まとめてダウンロードできたら便利かもねえ、と思いつつ。でも全部読むことないし。

f:id:haseharu:20131124211612p:plain

1論文あたり3-4MBくらいの容量になるようです。図表等の画像がなければ100-200KB程度。新しいkindle paperwhite欲しいなあとも思いつつ。

*1:といっても情報管理くらいしか読んでないのですが

シェルスクリプト × Web API

シェルスクリプトでWeb API的なものを使うメモ。
たぶんWeb API的なものをつかってデータをがーっともらってくる場合、シェルスクリプトが一番手軽です。
ほんの数行でかけます*1

たとえば、CiNii API(RDF)を通じてNCIDを使って資料タイトルを取り出す。

1件だけなら1行*2

curl "http://ci.nii.ac.jp/ncid/AA12227144.rdf"  | xpath '//rdf:RDF/rdf:Description/dc:title[1]/text()'

curlでデータ取得してxpathxml解析。

看護・保健科学研究

いいですね。

100件とか1000件とかある場合。while文で。

 AA12227144
 AA11354292
 AN00023058
 AN10507651

NCIDを別ファイル(ncid.txt)で用意しておいて、

while read id
do
	DATA=$(curl "http://ci.nii.ac.jp/ncid/${id}.rdf")
	TITLE=$(echo ${DATA} | xpath '//rdf:RDF/rdf:Description/dc:title[1]/text()')
	echo ${id}'\t'${TITLE} >> ncid_result.txt
done < ncid.txt

で回します。

AA12227144	看護・保健科学研究
AA11354292	千葉看護学会会誌 = Journal of Chiba Academy of Nursing Science
AN00023058	榮養學雑誌	
AN10507651	日本精神科看護学会誌

無事データとれてます。

他にもたとえば、dc:languageあたりもとりたいよ、という場合、

LANGUAGE=$(echo ${DATA} | xpath '//rdf:RDF/rdf:Description/dc:language/text()')

で追加していけばおっけーです。
NCIDのマッチングが失敗した場合、別途失敗したNCIDをncid_false.txtに書き込む処理をif文で組み込んでみます。

while read id
do
	DATA=$(curl "http://ci.nii.ac.jp/ncid/${id}.rdf")
	FLAG=$(echo ${DATA} | grep 'DOCTYPE html')
	if [ "${FLAG}" == "" ]
		then
			TITLE=$(echo ${DATA} | xpath '//rdf:RDF/rdf:Description/dc:title[1]/text()')
			LANGUAGE=$(echo ${DATA} | xpath '//rdf:RDF/rdf:Description/dc:language/text()')
			DATE=$(echo ${DATA} | xpath '//rdf:RDF/rdf:Description/dc:date/text()')
			OWNERCOUNT=$(echo ${DATA} | xpath '//rdf:RDF/rdf:Description/cinii:ownerCount/text()')
			echo ${id}'\t'${TITLE}'\t'${LANGUAGE}'\t'${DATE}'\t'${OWNERCOUNT} >> ncid_result.txt
		else
			echo ${id} >> ncid_false.txt
	fi
	sleep 1
done < ncid.txt
AA12227144	看護・保健科学研究	jpneng	2001	5
AA11354292	千葉看護学会会誌 = Journal of Chiba Academy of Nursing Science	jpn	1996	49
AN00023058	榮養學雑誌		jpn	1941	406
AN10507651	日本精神科看護学会誌		jpn	1990	82

実はCiNiiでRDF取得する場合、失敗したときの値はxmlで返ってきません。「html」で表示されるため失敗時の条件判断は「grep 'DOCTYPE html'」で判定、という感じにしてあります。

*1:とはいえ、利用の前にちゃんとWeb API的なものの利用規約のご確認をお願いします。

*2:1件だけデータ取得、なんてシチュエーションなさそうですが

Red Data Books

はじめに

リードテックラボ、CiNii Booksで遊んでみる、の巻です*1。このところ id:kitoneid:otani0083 とあーでもないこーでもない、とやっていた成果の一部として「Red Data Books」というサービスを作りました。まだ試験公開でまったく機能が揃っていませんが。トップページに表示されているのは全国の大学図書館で1冊しか所蔵されていない図書です。ランダムに表示される仕組みになっています。

「へー、それだけ?」という反応かなと思います。はい、いまのところそれだけです。

しくみ

技術的な詳細は id:otani0083 が近々発表する予定なので、ここでは書きません。

このサービスの肝となっているのは「どの図書館がどんな本を持っているのか」というデータです。「全国の大学図書館における所蔵館数Nの図書リスト」であったり「各図書館が所蔵している図書リスト」があってはじめて「所蔵館数1の本をランダムで表示する」ということが実現できます*2

上のようなデータを集めるのは大変だけど今回のように実際に取得できた場合どんなことができるのか。下記のささくれエントリーのような視点で今後、機能を追加していきたいとおもっています。
http://cheb.hatenablog.com/entry/2013/08/24/173533

*1:遊んでる場合か、という突っ込みが突き刺さります。

*2:もちろんCiNii Booksからデータをもらっているのですが。そういった視点でデータを集めるとなると実はけっこう困難です。どうやったのかという詳細はおーたにさんの発表で。

旅のみちづれ

たぶんきっと id:otani0083id:kitone の粋な計らいで。さきほど、Skype参加でたのしそうな旅にまぜてもらえたので少しブログを書きたいと思います。内容はタイトルにぜんぜん関係なくただの作業メモです。

CiNiiのリンクの種類

必要があってCiNii Articlesの外部リンクとGETリクエスト内容の対応関係を調べていました。

f:id:haseharu:20130727233926p:plain

GETでは、

name=*

でリンク先の情報と、

id=*

で具体的な個別アイテムのIDを渡しているようです。しかし、けっこういろいろあってびっくり。

機関リポジトリ

http://ci.nii.ac.jp/lognavi?name=ir&lang=jp&type=pdf&id=http%3A%2F%2Fhdl.handle.net%2F11094%2F24780

name=ir , でJAIRO連携分です。

URLデコード後
http://hdl.handle.net/11094/24780

idで渡しているのは上のようにターゲット先となるURLがそのまま渡されています*1

CiNii Link

http://id.nii.ac.jp/1001/00091366/

外部無料本文へのリンクです*2

CiNii PDF オープンアクセス , 定額アクセス可能 , 未公開 , 有料

http://ci.nii.ac.jp/lognavi?name=nels&lang=jp&type=pdf&id=ART0010004370

name=nels , NII-ELS分ですね。

J-stage

http://ci.nii.ac.jp/lognavi?name=jstg&lang=jp&type=pdf&id=http%3A%2F%2Fjapanlinkcenter.org%2FDN%2FJST.JSTAGE%2Fnmc%2F52.697%3Ffrom%3DCiNii

name=jstg , idはirと同じくURLです。

URLデコード後
http://japanlinkcenter.org/DN/JST.JSTAGE/nmc/52.697?from=CiNii

JOIでリゾルブしていてfrom=CiNiiも渡していますね。

*1:ただ、この場合、handleシステムで処理されるのでクリック後に表示されるURLとイコールではありません。

*2:これってよく考えたことなかったのですがCiNii側で書誌同定やリンク張りをやってるのでしょうか

*3:info:、がついてますね。

参考文献情報からDOIを同定する「Reference Search」

はじめに

リードテックラボ、DOIで遊んでみる編です*1。別件の作業の副産物的なものとして、先日CrossRefから公開されたCrossRef metadata search betaのAPIを使って、論文や図書等で引用、参考にされている文献の情報をいれてDOIを検索・同定しフルテキストへたどりつくことができる「Reference Search」を作ってみました。

たとえば、こんな感じの「参考文献情報」のテキストを入れて検索し、

Paul Gray, 2002, 'Knowledge Management', Information Systems Management, vol. 19, no. 1, pp. 89-93

当該論文へのフルテキストURL(DOI)を取得するためのツールです。

Reference Search

http://haseharu.org/labs/ref_search/

画面はこんな感じ。

f:id:haseharu:20130519120318p:plain

論文を読んでいて引用あるいは参考文献として上げられているテキストデータを特に整形することなくぽいっと検索窓にいれて検索する、あるいはテキスト選択してBookmarkletをクリック、でDOIが同定できてそのままフルテキストを読める(読めない場合もありますが)という感じです。

f:id:haseharu:20130519120429p:plain

つかいかた

「論文タイトル、雑誌名、巻号、ページ数」に関するデータをサイトの検索窓へコピペするか入力するか、「論文タイトル、雑誌名、巻号、ページ数」をテキスト選択してBookmarkletを動かす、の2種類で動きます。

検索結果

検索窓の下に同定された論文の書誌情報及びDOIが表示されます。DOIをクリックすれば外部サイトへ飛んでいきますのでそこでフルテキストを読むことができます*2。「SCORE」という数値が出てきますが、どのくらいの精度で同定できているかの参考となる値です。3以上だと同定できていますが、1-2だとやや怪しい感じです。このSCOREという値は後述しますが、利用しているCrossRefのAPIが算出している数字で詳しいことはよくわかりません*3。また、このAPIではCOinSも出力してくれているので検索結果の中にCOinSもそのまま出力しています*4

使ったもの

基本的にはCrossRefのAPIに「整形していないテキストをまるごと渡してDOIを同定する」機能があるためそれをそのまま使いました。ただしこの機能を使う場合POSTでデータを渡してあげる必要があります。

補足

DOIのRAとして最大のCrossRefではSimple text queryというサービスを提供しています。今回作った「Reference Search」と同じものです。が、CrossRefのSimple text queryは2010年から「登録制」となってしまい、メールアドレスを登録した上で、利用時にメールアドレスも入力しなければいけない、非常に使い勝手が悪いサービスになりました。あとわざわざサイトにいって「テキストを入力する」のも面倒で、このサービスおもしろそうだなと思ったものの結局自分は一度もまともに使ったことがありません。というわけでAPI公開に合わせて、登録不要で、Bookmarkletから簡単にDOIの検索ができるものがあれば自分も使うんじゃないかと思い作ってみました。

おわりに

今回は取り上げませんでしたが、CrossRef metadata search betaという仕組み自体はけっこうおもしろいです。

ファセット(資料タイプ、OA、分野、刊行年)による検索結果の絞り込み、ORCIDとの連携など、おもしろいことやってます*5

*1:ここのところDOIばかり触っています。

*2:当然ながら全てがオープンアクセスの論文ではないので契約が必要なものや課金されるものもあるので必ずしも全てが読めるわけではありません。

*3:ドキュメントがあるかもしれませんが

*4:上の画面キャプチャには「Find in a library」というworldcatへのリンクが貼られていますがこれは自分がGoogle chromeのCOinS 2 OpenURLをいれていてそこにWorldcatを登録しているためです。何もしていないとでてきません。

*5:資料タイプに「conference paper」があるのが個人的に気になっています。

Visual Current Awareness!

はじめに

リードテックラボ、いつもお世話になってるカレントアウェアネスを可視化して遊んでみよう編です。ちょうど一年前、canvasでかりかり書いてたものがあるのでカレントアウェアネスを可視化するのはリードテックラボ的には2度目になります。

こんな感じでカレントアウェアネスが可視化されます。

f:id:haseharu:20130511142751p:plain

説明

「丸」でカレントアウェアネスの記事を表しています。丸の大きさが違いますが大きさの違いは「はてなブックマーク」数の違いです。はてなブックマークでブックマークされている記事ほど大きく表示される、という仕組みです。カーソルを丸にのせていただくとツールチップでタイトルとはてなブックマークの数が表示されます。

f:id:haseharu:20130511151434p:plain

丸かツールチップ上のタイトルをクリックするとカレントアウェアネスの記事を読むことができます。トップページに表示されるのは「カレントアウェアネス R」(CA-R)の記事です。

  • CA-R [default]
  • CA-E
  • CA
  • ALL(上の3つ全部。表示されるまでに少し時間かかります)

となっていて、丸の意味は以下の通りです。

処理の流れと使ったもの

PHPでカレントアウェアネスポータルのRSSをそれぞれ取得、はてなブックマークAPIはてなブックマークの数を取得した後、D3.jsにて可視化、というシンプルなものです。

おわりに

実は前々回のエントリの続きでリソースとして「RSS」を使っています。繰り返しになりますが、構造化データであるRSSの使い道は広いです。別件でD3.jsを触っていて、D3.jsの習作の位置づけで作ってみました。けっこう前から触っていますがD3.js、良い感じです。1年前に可視化ツールをまとめたエントリを書きましたがその中でも一番使いやすいかもしれません。

http://haseharu.hatenablog.com/entry/2012/03/03/221401

console.logって知ってるかい?

そんな出だしではじまる手紙をこのページに書いてみようと思う。

宛先は10数年後のきみとぼく、だ。

 

「console.logって知ってるかい?」

 

中身はこれだけ。

唐突にこんな質問をして、それで終わる。

 

このページを開いたとき、きみは怪訝な顔をするかもしれない。

すっとそのままページを閉じてしまうだろうか。

それとも誰かに聞いてみるのだろうか。

もしかするとにやっとしているかもしれない。

あるいはすでにこのページを「再現」できる環境にないかもしれない。

それは正直なところ分からない。

 

答えを一つ書いてしまおうと思う。

console.logはJavascriptでよく使われているデバッグ用の関数だ。

これは答えの一つ。

 

きっときみはこの答えを読んで「だからなに?」と思うだろう。

そう。 これはたくさんある(はずの)答えの一つに過ぎない。

 

最後に。

Li:d tech(リードテック、と読む)というものがあってぼくたちはそこで少しずついろんなことを共有している。仕事も生活もいつも全部楽しいことばかり、といいたいところだけど、ところがどっこい、割と思うようにいかないし辛い時期もある。でもそーゆうのも全部ふくめて「悪くない」とも感じている。

 

いつかきみとそんな話をできたら嬉しい。