-2

基本的なソフトウェア エンジニアリング アーキテクトのガイダンスが本当に必要なだけです...「アーキテクチャ」と言うときは、私が持っている Perl の本で追うことができる疑似コードまたはステートメントを意味し、できればオンラインの例をいくつか...

Perl を使用しており、最終的に各パスから PMID を pmid2doi 変換 Web サイト ( http://www.pmid2doi.org/ ) に渡すために、Unix システムで Medline/Pubmed ファイル パスを解析しようとしています。

各リンクの構造は、次の形式のファイルパスです...

/xxxxx/xxxxx/xxxxx/xxxxx/xxxxx/UNC00000000000042/00223468/v45i3/S0022346809003820
                                                |<-PMID->|

00223468PMID です。

$ ls
18507872 main.pdf main.raw main.xml

これまでのところ、次のようなものがあります(bashで):

for doi in `find . -name "*.xml" | awk -F\/ '{print $2}' `  #this extracts the PMID
do
        echo  $doi
        wget pmid2doi website
done

今、それを Perl に翻訳する助けが必要です。

pmid2doi Webサイトでは、DOI を取得するために PMID を入力する必要があります。

これは、Perl で実行するために必要なものであり、これを実装する設計には少し助けが必要です...

開発のバックグラウンドを考慮して、Perl で正規表現を生成するための洞察や推奨サイトを教えていただければ幸いです。

どうもありがとう!

さらに:

pmid2doi Web サイトには、REST API が Web サイトDOI 値を期待していると書かれていることがわかります。
そこで、URL から REST 値を取得するサンプル Perl コードを見つける必要があります。
REST では、指定された URL を準備するだけで、返された結果は必要な値になるはずです。

4

2 に答える 2

2

もしかしてこういうこと?

use File::Find;

my $client = REST::Client->new( $an_url );
File::Find::find( sub { 
        return unless m/\.xml$/;
        carp "Could not open $File::Find::name!" 
            unless open( my $fh, '<', $File::Find::name )
            ;
        my $doi;
        while ( <$fh> ) { 
            next unless ( $doi ) = m{[^/]*/([^/]*)};
            $client->GET( join( '/', $base, $doi ));
            do_stuff_with_content( $client->responseContent );
        }
        close $fh;
    } => '.'
);
于 2012-10-25T17:57:28.520 に答える
1

私は物事を誤解していますか、それともローカルでPerlでこれを行うだけで、Webサイトに煩わされることはありませんか?リモートホストにアクセスして、遅延や使用制限などに対処する必要はありません...

https://metacpan.org/module/Bio::DB::EUtilities

編集:私は、NCBIのCGIクライアントです。ドキュメントから:'現在BioPerl-Runに存在する別のプロジェクトは、eUtils用のSOAPベースのインターフェースを利用しています。

https://bitbucket.org/reece/docdepot/src/ca32360f6fa4/archive/perl-version/bin/doi-to-pmid

#!/usr/bin/perl
# doi-to-pmid -- get the PubMed ids for a doi

use strict;
use warnings;

use Bio::DB::EUtilities;

my @pmids = doi_to_pmids( $ARGV[0] );
exit 1 unless (@pmids);
print( join("\n",@pmids), "\n" );

exit;


sub doi_to_pmids {
  my $doi = $_[0];
  my $f = Bio::DB::EUtilities->new(-eutil => 'esearch',
                                                                   -db => 'pubmed',
                                                                   -term => "$doi [doi]");
  my @ids = $f->get_ids();
  return (@ids);
}
于 2012-10-25T19:21:39.403 に答える