Allieマイナーバージョンアップ

Allieで使っているツールALICEの生みの親が訪れた日と奇しくも重なっていますが、Allieがマイナーバージョンアップしました。

  • 直リン機能の追加: http://allie.dbcls.jp/?s=iPS みたいにして使えます。
  • メッセージの日本語化: UA(ブラウザ)の言語設定に応じて表示されるメッセージが日英自動的に変わります。
  • 言語設定を明示的に指示する場合にはURLのパスの冒頭に en もしくは ja を含めます。http://allie.dbcls.jp/en のように。

次はコンテンツの国際化です。

NER を試す

ABNERはBioCreativeとNLPBA双方。
LingPipeはcmd_ne_en_bio_genia.shとcmd_ne_en_bio_genetag.sh双方。
更にLingPipeはここを参考にすべし。

RelEx 作業記録

CLASSPATH /home/yayamamo/src/opennlp-tools-1.4.3/output/opennlp-tools-1.4.3.jar:/home/yayamamo/src/opennlp-tools-1.4.3/lib/trove.jar:/home/yayamamo/src/opennlp-tools-1.4.3/lib/maxent-2.5.2.jar:/home/yayamamo/local/share/java/linkgrammar-4.5.8.jar:/home/yayamamo/src/jwnl14-rc2/jwnl.jar

[yayamamo@cl12 relex-1.1.0]$ ant
Buildfile: build.xml

build-subprojects:

init:

build-version:
[echo] Building RelEx version 1.1.0
[copy] Copying 1 file to /mnt/auto/home/yayamamo/src/relex-1.1.0/src/java/relex

look-for-gate:
[echo] Will not build GATE-based entity detector; GATE classes not found.

look-for-owl:
[echo] Will not build OWL output format; org.semanticweb.owl classes not found.

look-for-opennlp:

build-project:
[echo] relex: /mnt/auto/home/yayamamo/src/relex-1.1.0/build.xml
[javac] Compiling 134 source files to /mnt/auto/home/yayamamo/src/relex-1.1.0/bin
[javac] /mnt/auto/home/yayamamo/src/relex-1.1.0/src/java/relex/parser/RemoteLGParser.java:31: シンボルを見つけられません。
[javac] シンボル: クラス LGRemoteClient
[javac] 場所 : relex.parser.RemoteLGParser の クラス
[javac] private LGRemoteClient linkGrammarClient = new LGRemoteClient();
[javac] ^
[javac] /mnt/auto/home/yayamamo/src/relex-1.1.0/src/java/relex/parser/RemoteLGParser.java:179: シンボルを見つけられません。
[javac] シンボル: クラス LGRemoteClient
[javac] 場所 : relex.parser.RemoteLGParser の クラス
[javac] public LGRemoteClient getLinkGrammarClient()
[javac] ^
[javac] /mnt/auto/home/yayamamo/src/relex-1.1.0/src/java/relex/parser/RemoteLGParser.java:184: シンボルを見つけられません。
[javac] シンボル: クラス LGRemoteClient
[javac] 場所 : relex.parser.RemoteLGParser の クラス
[javac] public void setLinkGrammarClient(LGRemoteClient linkGrammarClient)
[javac] ^
[javac] /mnt/auto/home/yayamamo/src/relex-1.1.0/src/java/relex/parser/RemoteLGParser.java:31: シンボルを見つけられません。
[javac] シンボル: クラス LGRemoteClient
[javac] 場所 : relex.parser.RemoteLGParser の クラス
[javac] private LGRemoteClient linkGrammarClient = new LGRemoteClient();
[javac] ^
[javac] 注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
[javac] エラー 4 個

BUILD FAILED
/mnt/auto/home/yayamamo/src/relex-1.1.0/build.xml:96: Compile failed; see the compiler error output for details.

Total time: 2 seconds

参考にすべきページ

Hadoop io.compress / distributive

Version 0.20.0 (java 1.6.0_13 on SunOS 5.10)の話。
Mapの出力を圧縮するのにGzipCodecを利用したら何故か動作せず。
BZip2CodecならOK。
と思ったら、こちらもダメ。(コンパイルは通るのだが、実際に実行すると途中でコケる)
DefaultCodec でようやく問題無く動作。
まだ色々難しいのだろうか。

distributiveなMap関数の場合はCombinerを使う。

追記
どうやらSunOS 5.10/sparcだから問題があるようだ。
Java で Sun だから、むしろこちらの方が望ましいかと思いきや。
util.NativeCodeLoader で Loaded the native-hadoop library と表示されるのは x86 で、sparcマシンでは失敗する。

追記2
Reduce Taskの数を複数にするためには conf/mapred-site.xml に mapred.tasktracker.reduce.tasks.maximum の数を大きくするだけではなく、実際のソースコードに conf.setNumReduceTasks(30) の様に設定する必要がある。

UTF8 / binary on mod_perl and MySQL max_allowed_packet

Perl (mod_perl) で日本語を利用するために binmode STDOUT, “:encoding(utf8)”; をしていたが、これがネックになって今度は バイナリデータを出力する際に変換が起きてしまっていた。
バイナリを出力する前に binmode STDOUT, “:raw”; を怠らずに。

また、MySQL のデータベースに、ある程度のサイズのデータを放り込もうとする際には max_allowed_packet のサイズに気をつける必要がある。初期値は1Mになっているので、my.cnf の中に書かれているその値を変更する。

変更後のMySQLサーバーの再起動を忘れずにする(mysqladminで reload ではなく、shutdownしてから再起動。)ことと、mod_perl による運用では、Perlスクリプト中で SET max_allowed_packet=8M などとしても反映されないことに注意。

SGE

qsub … -o PATH
と指定すると、同じ名前のファイルが既にPATHにある時、上書きではなくて追加 (append) が行われることに注意。

Allieデータ公開

無事Creative Commons Ver. 2.1にて公開に至りました。
Allie
今回、PubMed/MEDLINE® のデータを利用した派生物の公開に対する利用許諾のあり方について、弁護士とのやり取りを通し、色々と学ぶことがありました。
利用条件の内容が結構な量になっています。NLMは、そのデータの派生物を公開する場合の条件として、NLMデータの利用条件中に書かれている一部の再掲を求めていることも関係しています。一般に米国政府の生成したデータには著作権が無いのですが、PubMed/MEDLINEに収められている文献には出版社の権利があるので注意が必要です。また、元データであるPubMed/MEDLINEデータが頻繁に更新されていることから、そのデータを利用した派生物も適宜更新に努めることが求められています。もちろん、公開する時にはクレジットを載せることも必要になります。その他、®を付けることも求められていました。しかし多くのサイトは付けていないですね。とても律義なサイトになったのでしょうか。

動的MEDLINE検索 for LSDB

無事公開可能になりました。
DBCLSによる公開バージョンinMeXesのURLはhttp://docman.dbcls.jp/im/

以下のアプリは同APIを利用しています。4文字以上入力すると検索開始です。

Perl Text::Scan mod_perl

PerlモジュールText::Scanは内部で__DATA__キーワードとInlineを用いている。

mod_perl を利用したハンドラ内で特に対策を取らずに本モジュールを利用すると下記のメッセージが表示され、うまく動作しない。

One or more DATA sections were not processed by Inline.

そこで、一言 “Inline->init;”を入れてやるとうまくいく。

use Inline;
Inline->init

http://search.cpan.org/~kgb/PDL-2.3.2/Basic/Gen/Inline/Pdlpp.pm に書かれていた。
これが見つかるまで結構時間を費やした。

アプリケーションタイプ

Content-Type:

に続いて記述される、まさに「コンテンツのタイプ」に関し、RFCでの記述を調べてみた。
何故か簡単に見つからなかったが、ようやく発見したのでメモしておくことに。
特に今回はTogoDocからリファレンスファイルをダウンロードして取得する際のタイプを調べることを目標としているので、typeはapplicationに限定し、そのsubtypeについて調査。
まずはWikiPediaのエントリをチェック。
すると、RFC2045に記述の規則が書かれていて、subtypeについては以下のような決まりになっていることが判明。

subtype := extension-token / iana-token
extension-token := ietf-token / x-token
ietf-token := <An extension token defined by a standards-track RFC and registered with IANA.>
x-token := <The two characters “X-” or “x-” followed, with no intervening white space, by any token>
iana-token := <A publicly-defined extension token. Tokens of this form must be registered with IANA as specified in RFC 2048.>

そしてIANAに登録されているsubtype一覧は以下の通り。
http://www.iana.org/assignments/media-types/application/
というわけで、リファレンス関係のファイルについては特に登録されているものはないので、x-tokenを用いることになった。

まとめサイトとしてはこちらも参考になる。

因みにRFC2048でIANAへの新規subtype登録方法が記述されている。