PUBMEDのmedline形式ファイルをAccessに取り込む方法について


medlineのファイルは
http://homepage3.nifty.com/Noah/pubmed01.htm
のような特徴がありますが、これを簡単にMS Accessに取り込みたいのです。

過去には文献管理ソフトを使っていましたが、USBメモリでの持ち運びやすさや、カスタマイズのしやすさ等からアクセスに変えました。
現在は、pubmed→result.txt→アイPUB→result.cvt→拡張子を書き換え→result.txt→アクセスと、明らかに無駄なステップを踏んでおります。

これをスパッとインポートできる方法についてご存知の方、教えていただけませんか。

回答の条件
  • 1人2回まで
  • 登録:2007/06/16 08:13:41
  • 終了:2007/06/17 13:23:42

回答(2件)

id:wm5775 No.1

wm5775回答回数351ベストアンサー獲得回数42007/06/16 12:22:12

ポイント50pt

#質問の趣旨をはずしていたらすみません。

もし、適当にプログラミングができるのであれば、pubmedのeutlsという機能を使うと、結果がxml形式で取り出せます(というか、らしいでです)。

#プログラミングといっても大したことはありません。URLを叩いたり、Perlなどが使えれば、ある程度の作業が自動化ができるといった感じです。

Entrez Programming Utilities

http://eutils.ncbi.nlm.nih.gov/entrez/query/static/eutils_help.h...

bear32さんのおっしゃるpubmed形式は著者数やキーワード数が任意になる形になっていると思うので、取り込みたいパターンが含まれる複数文献を一つにまとめたxmlファイルを用意して、アクセスにインポートすることで、自動的に正規化してくれるんじゃないでしょうか?

#やっていないので本当にできるかどうかわかりませんが、私はリンクリゾルバーをこんな感じでそのうち構築しようと考えていました。

たとえば、"navx"というキーワードで検索するperlプログラムはこんな感じです。


use LWP::Simple;

$esearch = "http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed...";

$esearch_result = get($esearch);

$esearch_result =~

m|<Count>(\d+)</Count>.*<QueryKey>(\d+)</QueryKey>.*<WebEnv>(\S+)</WebEnv>|s;

my $Count = $1;

my $QueryKey = $2;

my $WebEnv = $3;

#print "count = $Count;\nQueryKey = $QueryKey;\nWebEnv = $WebEnv";

$elink = "http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&...$QueryKey&WebEnv=$WebEnv";

$elink_result = get($elink);

print $elink_result;

あと、一文献ごとにpubmedデータファイルを持っているのだとしたら、富士ゼロックスの情報箱というソフトが非常に便利だったんですけど、発売をやめちゃったらしいです。

#これ、かなりイケてるソフトだったんですけどね。

id:bear32

ご回答ありがとうございました。

リンク先を見ておりお礼が遅れました。

XMLでの扱いについてもう少し調べてみます。

2007/06/16 18:26:05
id:bonlife No.2

回答回数421ベストアンサー獲得回数752007/06/16 23:29:11

ポイント50pt

以下の条件によって対応方法は変わってくると思います。

  • 使っているMS Accessのバージョン
  • 最終的にどのような形(テーブ構成)でデータを管理したいか

MS Access 2002の場合、PubMedのXMLをそのままインポートしても大量のテーブルに分割されてしまいます。

2003の場合、ImportXMLのDataTransformパラメータを使ったり、TransformXMLメソッドを使うことで、あらかじめ用意したxslファイルを使ってXMLを取り込みやすい形式に変換した上で、インポートすることができます。

いずれにせよ、VBAでのプログラミングなどが必要になります。

私もEXCELを使って同様のことを行おうとしたことがあり、その時は以下の2つの方法を試しました。

  1. EXCEL VBAからMSXMLの機能を利用し、XSLTで変換してからインポートする
  2. EXCEL VBAからMSXMLの機能を利用し、XMLを読み込んだDOMDocumentからXPathで必要な情報を取り出し、整形した上でEXCELにデータを挿入

XSLTに慣れていないとXMLの2次元化(フラットにして1つのテーブルにおさまるように変換すること)は結構難しいです。

2番目の方法の方がしっくり来たため、そちらを使いました。

また、VBAではなく使い慣れたスクリプト言語がある場合、そちら側でデータを取得した後、Accessを操作してデータを挿入する方法もあります。(id:wm5775さんも説明していますね。)

ただ、スクリプト言語を使うのであれば、それぞれ適したライブラリがあるので、それを使った方が楽ですよ。

  1. BioPerl
  2. BioPython (解説)
  3. BioRuby

それぞれ、PubMEDの情報を簡単に扱う方法を提供しています。例えば、Pythonであれば以下のページが参考になります。

どれもあまり簡単な方法ではありませんが、少しでも参考になれば幸いです。

id:bear32

ご回答ありがとうございます。

accessのバージョンは2000です・・・。

やはりXMLでの取り扱いがポイントなのです。

お恥ずかしながら,VBAが精一杯の私にはかなりの困難な作業になりますね。

ですが,いいきっかけですので,頂きました資料を元に,勉強を始めてみることにします。

2007/06/17 13:21:21
  • id:bear32
    一筋縄ではいかないことが良く分かってしまいました。
    いいきっかけですので,これを糸口に少しずつ勉強して,また質問に来ます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません