我真的只需要一些基本的软件工程架构指导......当我说“架构”时,我的意思是伪代码或语句,我可以在Perl书中找到,并希望有些在线实例...
我正在使用Perl而我正在尝试解析Unix系统上的Medline / Pubmed文件路径,以便最终将PMID从每个路径传递到pmid2doi转换网站(http://www.pmid2doi.org/)
每个链接的结构都是格式的文件路径...
/xxxxx/xxxxx/xxxxx/xxxxx/xxxxx/UNC00000000000042/00223468/v45i3/S0022346809003820
|<-PMID->|
其中00223468
是PMID。
$ 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 网站需要输入PMID才能返回DOI。
这是我需要在Perl中运行的东西,我需要一些帮助来设计实现这个......
鉴于您的开发背景,我将非常感谢您在Perl中生成正则表达式的任何见解或推荐网站。
非常感谢!
此外:
我看到 pmid2doi 网站上说REST API期望网站加上的DOI值。
所以我需要找一些从URL获取REST值的Perl代码示例
在REST中,我只是按照指定准备URL,然后返回的结果应该是我想要的值。
答案 0 :(得分: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;
} => '.'
);
答案 1 :(得分:1)
我是否误解了这些事情,或者您是否可以在本地Perl中执行此操作而不打扰网站?无需点击远程主机并处理延迟,使用限制等...
https://metacpan.org/module/Bio::DB::EUtilities
编辑:我是,这是NCBI的CGI客户端。来自文档:'一个单独的项目,目前存在于BioPerl-Run中,利用基于SOAP的eUtils接口。'
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);
}