J-STAGEの論文をZoteroに取り込む

前回の続きになります.タイトルの通り,J-STAGEに登録された論文をZoteroに取り込むのですが,人名周辺でトラブルが生じたので,それの解決もしてみましたという話になります.

手順

まずZoteroを起動しておきます.取り込み先のコレクションを選択しておくといいでしょう.

ブラウザでJ-STAGEの当該論文のページを開きます.Connectorをブラウザのアドインとしてインストールしていると,このようなアイコンがあります.

ここをクリックすると,論文のメタデータとPDFファイルがZoteroに取り込まれます(もちろんPDFファイルへのアクセス権がある場合に限る).この段階で取り込み先のコレクションを指定することもできます.

問題点

Zotero側でもきちんと取り込まれたことが確認できます.一見これでよさそうですが,よ~く見ると問題が1つあります.日本人著者等の姓と名が逆になっているのです.

ちなみに,欧米人の場合は姓と名が正しくZoteroに認識されているようです(その他,アジア人などは未確認です).

対応

ここでは,「どうすれば上記の問題点を解消できるか」だけについて述べます.

まずZoteroのデータディレクトリ(メニューの[編集]-[設定]で現れるダイアログの[詳細]-[ファイルとフォルダ]タブで確認できます)を開き,その中のtranslatorsディレクトリを覗いてみて下さい.

Javascriptファイルがたくさんあり,ファイル名には見覚えのあるWebサイト名がついているのがわかると思います.ZoteroにはTranslatorという仕組みがあり,それぞれのサイトに対応して論文等のメタデータなどを読み取る処理が実装されています(全てのTranslatorが特定のサイトに特化しているわけではなく,もう少しメタなTranslatorもありますが,それはまた後の話).そしてJ-Stage.jsというファイルを見つけられることができたでしょうか.これがJ-STAGEに対応していると容易に確信することができます.

そのJ-Stage.jsを,次のように修正します(88行あたりから掲載).

// get BibTex Link
var bibtexurl = ZU.xpathText(doc, '//a[contains(text(), "BIB TEX")]/@href');
var risurl = ZU.xpathText(doc, '//a[contains(text(), "RIS")]/@href'); // 追加
//ZU.doGet(bibtexurl, function (text) {
ZU.doGet(risurl, function (text) {  // 書換
  var bibtex = text;
  // Zotero.debug(bibtex)
  var translator = Zotero.loadTranslator("import");
  //translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); 
  translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");  // 書換
  translator.setString(bibtex);

実質的には引数として渡されている文字列を2つ書き換えるだけですね.こうすると,日本人名の姓と名を正しく認識するようになりました.とっちばれ(←落着したときに締めの言葉として使う津軽地方の言葉).

(2022-07-12追記:どうも上手くいくときと上手くいかない=挙動が変わらないときがありますね…しかも後者の割合がかなり大きいという.Zoteroとかブラウザとかを再起動すると上手くいくことが多いですが,それでも上手くいかないことがあって,どこが決め手になっているのかがよくわかりません.)

原因

J-Stageが出力するBibTexでの人名表記が,欧米人については {First Family}(もしくは {Family, First} )なのに対して,日本人は {Family First}(もしくは {First, Family})となっていることが原因です.Zoteroではその人名がどちらの文化圏に属するものなのかを知るすべがありません!これがBibTexの仕様なのかどうかはわかりません.私の推測ですが,仕様では定められておらず,(crazyな)慣習が広まって事実上の標準になってしまったのではないかと思います(例えば「武田史郎のウェブログ」のjecon.bst (ver.3.1)とbibファイルにおける日本語文献の著者名の指定方法についての記事から推測;2022-07-12リンクを移転先のURLに変更).

J-STAGEでは論文のメタデータをBibTex形式とRIS形式で提供しているのですが,J-Stage.jsではBibTex形式のメタデータを読み込んでいたため,上記の問題が発生していたのでした.RIS形式ではそのような問題は生じないと考えられるため,RIS形式でメタデータを読み込むことで対応した,というのが上記のソースコードになります.

せっかくパッチを作成したので,Zotero本体で採用してもらおうかと思ったのですが,既存のテストケース(=仕様?)にマッチしない部分が出てきたので,いったん見送ります.

追記(2024-03-22):Zotero本体に送ったパッチ(PR)が採用(マージ)されました.次のアップデートで更新されると思います.