Lingua-Align
view release on metacpan or search on metacpan
lib/Lingua/Align/LinkSearch.pm view on Meta::CPAN
#-*-perl-*-
package Lingua::Align::LinkSearch;
=head1 NAME
Lingua::Align::LinkSearch - Search algorithms for tree alignment
=head1 SYNOPSIS
my $aligner = new Lingua::Align::LinkSearch(-link_search => $type);
$aligner->search(\%links,\@scores,$min_score,\@src,\@trg)
=head1 DESCRIPTION
Class factory for searching the best tree alignment based on local
link scores Various strategies have been implemented. Use the argument
C<-link_search> in the constructor to choose from the following
search strategies:
threshold .............. greedy search with score thresholds
assignment ............. bipartite graph matching (assignment problem)
greedy ................. greedy search
greedyWellformed ....... greedy search with well-formedness constraints
greedyFinal ............ add step to link unlinked nodes (if wellformed)
greedyFinalAnd ......... add step to link still unlinked nodes
src2trg ................ source-to-target alignment (one link / source)
trg2src ................ target-to-source alignment (one link / target)
src2trgWellFormed ...... src2trg with wellformedness constraints
intersection ........... intersection between src2trg and trg2src
NTfirst ................ align non-terminals nodes first
NTonly ................. align only non-terminals
Tonly .................. align only termnal nodes
PaCoMT ................. used in PaCoMT project
cascaded ............... conbine search strategies (sequentially)
=cut
use 5.005;
use strict;
use FileHandle;
use Lingua::Align::LinkSearch::Threshold;
use Lingua::Align::LinkSearch::Greedy;
use Lingua::Align::LinkSearch::GreedyWellFormed;
use Lingua::Align::LinkSearch::GreedyFinal;
use Lingua::Align::LinkSearch::GreedyFinalAnd;
use Lingua::Align::LinkSearch::Src2Trg;
use Lingua::Align::LinkSearch::Src2TrgWellFormed;
use Lingua::Align::LinkSearch::Trg2Src;
use Lingua::Align::LinkSearch::Intersection;
use Lingua::Align::LinkSearch::NTFirst;
use Lingua::Align::LinkSearch::NTonly;
use Lingua::Align::LinkSearch::Tonly;
use Lingua::Align::LinkSearch::Assignment;
use Lingua::Align::LinkSearch::PaCoMT;
use Lingua::Align::LinkSearch::Cascaded;
use Lingua::Align::LinkSearch::Viterbi;
use Lingua::Align::LinkSearch::AssignmentWellFormed;
sub new{
my $class=shift;
my %attr=@_;
# my $type = $attr{-link_search} || 'greedy';
my $type = $attr{-link_search} || 'threshold';
if ($type=~/^cascaded/i){
return new Lingua::Align::LinkSearch::Cascaded(%attr);
}
if ($type=~/^viterbi/i){
return new Lingua::Align::LinkSearch::Viterbi(%attr);
}
if ($type=~/paco/i){
return new Lingua::Align::LinkSearch::PaCoMT(%attr);
}
# NT nodes first using the search strategy specified thereafter
if ($type=~/^nt.*first/i){
return new Lingua::Align::LinkSearch::NTFirst(%attr);
}
if ($type=~/and/i){
return new Lingua::Align::LinkSearch::GreedyFinalAnd(%attr);
}
if ($type=~/final/i){
return new Lingua::Align::LinkSearch::GreedyFinal(%attr);
}
# NT nodes first but "final" and "and" are handled before
if ($type=~/nt.*first/i){
return new Lingua::Align::LinkSearch::NTFirst(%attr);
}
if ($type=~/ntonly/i){
return new Lingua::Align::LinkSearch::NTonly(%attr);
}
if ($type=~/tonly/i){
return new Lingua::Align::LinkSearch::Tonly(%attr);
}
if ($type=~/src2trg.*well.*form/i){
return new Lingua::Align::LinkSearch::Src2TrgWellFormed(%attr);
}
if ($type=~/src2trg/i){
return new Lingua::Align::LinkSearch::Src2Trg(%attr);
}
if ($type=~/trg2src/i){
return new Lingua::Align::LinkSearch::Trg2Src(%attr);
}
if ($type=~/inter/i){
return new Lingua::Align::LinkSearch::Intersection(%attr);
}
if ($type=~/(assign|munkres).*wellform/i){
return new Lingua::Align::LinkSearch::AssignmentWellFormed(%attr);
}
if ($type=~/(assign|munkres)/i){
return new Lingua::Align::LinkSearch::Assignment(%attr);
}
if ($type=~/well.*formed/i){
return new Lingua::Align::LinkSearch::GreedyWellFormed(%attr);
}
if ($type=~/greedy/i){
return new Lingua::Align::LinkSearch::Greedy(%attr);
}
return new Lingua::Align::LinkSearch::Threshold(%attr);
}
# virtual method for checking additional constraints such as wellformedness
( run in 2.285 seconds using v1.01-cache-2.11-cpan-9581c071862 )