$factory->get_abstract
과 같은 개체 메서드를 찾는 경우 해당 개체가 존재하지 않습니다. esummary
을 사용하면 항목에 초록이 있는지 알려줍니다. 예 :
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use Bio::DB::EUtilities;
my @ids = (23298400);
my $factory = Bio::DB::EUtilities->new(-eutil => 'esummary',
-email => '[email protected]',
-db => 'pubmed',
-retmode => 'xml',
-id => \@ids);
while (my $doc = $factory->next_DocSum) {
while (my $item = $doc->next_Item('flattened')) {
if ($item->get_name eq 'HasAbstract') {
printf("%-20s: %s\n",$item->get_name,$item->get_content) if $item->get_content;
}
}
}
이 메시지는 단지 HasAbstract : 1
으로 인쇄됩니다. 초록을 얻으려면 몇 가지 옵션이 있습니다. 하나는 efetch
을 사용하여 xml을 반환하고 my $xml = $factory->get_Response->content
으로 파일에 쓰는 대신 내용을 저장할 수 있으며 그 안에 "Abstract"노드를 찾습니다.
#!/usr/bin/env perl
use 5.010;
use utf8;
use strict;
use warnings;
use Bio::DB::EUtilities;
use XML::LibXML;
my @ids = (23298400);
my $factory = Bio::DB::EUtilities->new(-eutil => 'efetch',
-email => '[email protected]',
-db => 'pubmed',
-retmode => 'xml',
-id => \@ids);
my $xml = $factory->get_Response->content;
my $xml_parser = XML::LibXML->new();
my $dom = $xml_parser->parse_string($xml);
my $root = $dom->documentElement();
for my $node ($root->findnodes('//*[text()]')) {
my $name = $node->nodeName();
if ($name eq 'Abstract') {
for my $child ($node->findnodes('*')) {
binmode STDOUT, ":utf8";
say $child->textContent();
}
}
}
이 코드는 추상적 인 (이 내가 biostars에 제공하지만 여기 완전성을 포함 같은 대답이다) 인쇄합니다. 또 다른 옵션은 Bash 스크립트에서 curl을 사용하거나 Perl 스크립트에서 LWP::UserAgent을 사용하여 직접 쿼리를 구성하는 것입니다. EFetch에 대한 지침을 보면 retmode
을 "text"로 설정하고 rettype
을 "abstract"로 설정할 수 있음을 알 수 있습니다. 또한 "예제"섹션에는 PMID가있는 쿼리를 작성하여 요약 텍스트 만 얻는 방법에 대한 몇 가지 예제가 있습니다.
BioPerl 메서드를 사용하면 훨씬 많은 정보에 액세스 할 수 있지만 직접 파싱 (또는 API 읽기)을해야 할 수도 있습니다. 또는, 만약 당신이 관심있는 것이라면 단지 초록을 가져올 수 있지만, 그 접근법은 출판물과 관련된 다른 정보가 아니라 초록만을 얻고 있다는 점에서보다 제한적입니다.
출처
2013-10-29 18:25:32
SES