| #!/usr/bin/env perl |
| use strict; |
| use warnings; |
| use Dumbbench; |
| use File::Basename 'dirname'; |
| use File::Spec::Functions qw/catfile catdir rel2abs/; |
| use File::Temp ':POSIX'; |
| use FindBin; |
| use Getopt::Long; |
| |
| BEGIN { |
| unshift @INC, "$FindBin::Bin/../lib"; |
| }; |
| |
| my $columns = 0; |
| my $no_header = 0; |
| GetOptions( |
| 'columns|c' => \$columns, |
| 'no-header|n' => \$no_header, |
| 'help|h' => sub { |
| print "--columns|-c Print instances in columns\n"; |
| print "--no-header|-n Dismiss benchmark names\n"; |
| print "--help|-h Print this page\n\n"; |
| exit(0); |
| } |
| ); |
| |
| our $SCRIPT_NAME = 'korapxml2krill'; |
| |
| my $f = dirname(__FILE__); |
| my $script = rel2abs(catfile($f, '..', 'script', $SCRIPT_NAME)); |
| |
| |
| # begin instance 1 setup |
| # Load example file |
| my $input = rel2abs(catdir($f, '..', 't', 'annotation', 'corpus', 'doc', '0001')); |
| my $output = tmpnam(); |
| my $cache = tmpnam(); |
| # end instance 1 |
| |
| |
| # begin instance 2 setup |
| # Load example file |
| use KorAP::XML::Krill; |
| use KorAP::XML::Tokenizer; |
| my $path = catdir(dirname(__FILE__), '..','t','real', 'corpus','GOE-TAGGED','AGA','03828'); |
| my ($tokens, $result); |
| # end instance 2 |
| |
| |
| # Create a new benchmark object |
| my $bench = Dumbbench->new( |
| verbosity => 0 |
| ); |
| |
| # Add benchmark instances |
| $bench->add_instances( |
| Dumbbench::Instance::PerlSub->new( |
| name => 'Script-ExampleRun-1', |
| code => sub { |
| my $cmd = join( |
| ' ', |
| 'perl', $script, |
| '--input' => $input, |
| '--output' => $output, |
| '--cache' => $cache, |
| '-k' => '0.03', |
| '-t' => 'OpenNLP#Tokens', |
| '-l' => 'ERROR', |
| '>' => '/dev/null' |
| ); |
| `$cmd`; |
| } |
| ), |
| Dumbbench::Instance::PerlSub->new( |
| name => 'Script-Conversion-GOE-Tagged-1', |
| code => sub { |
| my $doc = KorAP::XML::Krill->new(path => $path . '/'); |
| $doc->parse; |
| my $meta = $doc->meta; |
| $tokens = KorAP::XML::Tokenizer->new( |
| path => $doc->path, |
| doc => $doc, |
| foundry => 'Base', |
| layer => 'Tokens_conservative', |
| name => 'tokens' |
| ); |
| $tokens->parse; |
| $tokens->add('DeReKo', 'Structure', 'base_sentences_paragraphs'); |
| $tokens->add('DRuKoLa', 'Morpho'); |
| $result = $tokens->to_data; |
| $tokens = undef; |
| } |
| ), |
| Dumbbench::Instance::PerlSub->new( |
| name => 'Conversion-GOE-Tagged-1', |
| code => sub { |
| my $doc = KorAP::XML::Krill->new(path => $path . '/'); |
| $doc->parse; |
| my $meta = $doc->meta; |
| $tokens = KorAP::XML::Tokenizer->new( |
| path => $doc->path, |
| doc => $doc, |
| foundry => 'Base', |
| layer => 'Tokens_conservative', |
| name => 'tokens' |
| ); |
| $tokens->parse; |
| $tokens->add('DeReKo', 'Structure', 'base_sentences_paragraphs'); |
| $tokens->add('DRuKoLa', 'Morpho'); |
| $result = $tokens->to_data; |
| $tokens = undef; |
| } |
| ) |
| ); |
| |
| # Run benchmarks |
| $bench->run; |
| |
| # Output in a single row |
| if ($columns) { |
| unless ($no_header) { |
| print join("\t", map { $_->name } $bench->instances), "\n"; |
| }; |
| print join("\t", map { $_->result->raw_number } $bench->instances), "\n"; |
| exit(0); |
| }; |
| |
| print "----------------------------------\n"; |
| |
| # Output simple timings for comparation |
| foreach my $inst ($bench->instances) { |
| unless ($no_header) { |
| print $inst->name, ': '; |
| }; |
| print $inst->result->raw_number, "\n"; |
| }; |
| |
| exit(0); |