DTA-CAB
view release on metacpan or search on metacpan
CAB/Analyzer.pm view on Meta::CPAN
## + assumes $$tmpvar is initialized to undef at start of evaluation
sub _am_fst_uniq {
my $listvar = shift || '@_';
my $tmpvar = shift || '$val';
return ("(map {$tmpvar && $tmpvar\->{hi} eq \$_->{hi} ? qw() : ($tmpvar=\$_)}"
.' sort {($a->{hi}//"") cmp ($b->{hi}//"") || ($a->{w}//0) <=> ($b->{w}//0)}'
." $listvar)"
." ##== _am_fst_uniq\n"
);
}
## PACKAGE::_am_fst_usort($listvar='@_', $tmpvar='$val')
## + wrapper for _am_fst_sort(_am_fst_uniq($listvar,$tmpvar))
sub _am_fst_usort {
return _am_fst_sort(_am_fst_uniq(@_));
}
## PACKAGE::_am_clean($hashvar='$_->{$lab}')
## + access-closure macro (STMT) to delete a hash entry if undefined; evaluates to
## delete($$hashvar) if (!defined($$hashvar));
sub _am_clean {
my $hashvar = shift || '$_->{$lab}';
return "delete($hashvar) if (!defined($hashvar)); ##== _am_clean\n"
}
## PACKAGE::_am_tag($mootvar='$_->{moot}', $defaultvar='undef')
## + access-closure macro (EXPR) for a moot or dmoot tag; evaluates to
## ($$mootvar ? $$mootvar->{tag} : $defaultvar)
sub _am_tag {
my $mootvar = shift||'$_->{moot}';
my $default = shift||'undef';
return "($mootvar ? $mootvar\->{tag} : $default) ##== _am_tag\n";
}
## PACKAGE::_am_word($mootvar='$_->{moot}', $defaultvar='undef')
## + access-closure macro (EXPR) for a moot or dmoot tag; evaluates to
## ($$mootvar ? $$mootvar->{word} : $defaultvar)
sub _am_word {
my $mootvar = shift||'$_->{moot}';
my $default = shift||'undef';
return "($mootvar ? $mootvar\->{word} : $default) ##== _am_word\n";
}
## PACKAGE::_am_lemma($mootvar='$_->{moot}', $defaultvar='undef')
## + access-closure macro (EXPR) for a moot lemma; evaluates to
## ($$mootvar ? $$mootvar->{word} : $defaultvar)
sub _am_lemma {
my $mootvar = shift||'$_->{moot}';
my $default = shift||'undef';
return "($mootvar ? $mootvar\->{lemma} : $default) ##== _am_lemma\n";
}
## PACKAGE::_am_tagh_fst2moota($taghvar='$_')
## + access-closure macro (EXPR): single moot token analysis from TAGH-style fst analysis
## + requires: $$taghvar->{hi}; evaluates to:
## {details=>$taghvar->{hi}, prob=>($$taghvar->{w}||0), tag=>($$taghvar->{hi} =~ /\[\_?([A-Z0-9]+)\]/ ? \$1 : $$taghvar->{hi})}
sub _am_tagh_fst2moota {
my $taghvar = shift||'$_';
return ("{details=>$taghvar\->{hi},"
." prob=>($taghvar\->{w}||0),"
." tag=>($taghvar\->{hi} =~ /\\[\\_?((?:[A-Za-z0-9\.]+|\\\$[^\\]]+))\\]/ ? \$1 : $taghvar\->{hi})" ##-- allow e.g. [$(] tags from tokenizer!
."} ##-- _am_tagh_fst2moota\n");
}
## PACKAGE::_am_tagh_list2moota($listvar='@{$_->{morph}}')
## + access-closure macro (EXPR): moot token analysis-list from TAGH-style fst analysis-list
## + evaluates to (something like):
## (map { $${_am_tagh_fst2moota('$_')} } $$listvar)
sub _am_tagh_list2moota {
my $listvar = shift||'@{$_->{morph}}';
#return "(map {ref(\$_) ? "._am_tagh_fst2moota('$_')." : {details=>\$_,tag=>\$_,prob=>0}} $listvar) ##-- _am_tagh_list2moota\n";
return "(map {"._am_tagh_fst2moota('$_')."} map {ref(\$_) ? \$_ : {hi=>\$_}} $listvar) ##-- _am_tagh_list2moota\n";
}
## PACKAGE::_am_tagh_moota_uniq($listvar='@_', $tmpvar='$val')
## + access-closure macro (EXPR) for a unique (by details) list of moot analyses $$listvar
## + only the prob-minimal analysis is kept for each 'details'
## + evaluates to a list of details-unique fst analysis hashes:
## (map {$$val && $$val->{details} eq $_->{details} ? qw() : ($$val=$_)} sort {$a->{details} cmp $b->{details} || ($a->{prob}//0) <=> ($b->{prob}//0)} $$listvar)
## + assumes $$tmpvar is initialized to undef at start of evaluation
sub _am_tagh_moota_uniq {
my $listvar = shift || '@_';
my $tmpvar = shift || '$val';
return ("(map {$tmpvar && $tmpvar\->{details} eq \$_->{details} ? qw() : ($tmpvar=\$_)}"
.' sort {($a->{details}//"") cmp ($b->{details}//"") || ($a->{prob}//0) <=> ($b->{prob}//0)}'
." $listvar)"
." ##== _am_tagh_moota_uniq\n"
);
}
## PACKAGE::_am_tagh_list2moota_uniq($listvar, $tmpvar)
## + wrapper for _am_tagh_moota_uniq( _am_tagh_list2moota($listvar), $tmpvar )
sub _am_tagh_list2moota_uniq {
return _am_tagh_moota_uniq( _am_tagh_list2moota($_[0]), $_[1] );
}
## PACKAGE::_am_dmoot_fst2moota($fstvar='$_')
## + access-closure macro (EXPR): single dmoot token analysis from fst analysis
## + requires: $$fstvar->{hi}; evaluates to:
## {tag=>$$fstvar->{hi}, prob=>($$fstvar->{w}||0)}
sub _am_dmoot_fst2moota {
my $fstvar = shift||'$_';
return "{tag=>$fstvar\->{hi}, prob=>($fstvar\->{w}||0)} ##-- _am_dmoot_fst2moota\n";
}
## PACKAGE::_am_dmoot_list2moota($listvar='@_')
## + access-closure macro (EXPR): dmoot token analysis-list from fst analysis-list
## + evaluates to:
## (map { $${_am_dmoot_fst2moota('$_')} } $$listvar)
sub _am_dmoot_list2moota {
my $listvar = shift||'@_';
return "(map {"._am_dmoot_fst2moota('$_')."} $listvar) ##-- _am_dmoot_list2moota\n";
}
## $regex_str = PACKAGE::_am_wordlike_regex()
## + for use e.g. by Analyzer::Automaton subclass {allowTextRegex} property defaults
sub _am_wordlike_regex {
return '^(?:(?:[[:alpha:]\p{Combining_Diacritical_Marks}\-\@\x{ac}]*[[:alpha:]\p{CombiningDiacriticalMarks}]+)|(?:[[:alpha:]\p{CombiningDiacriticalMarks}]+[[:alpha:]\p{CombiningDiacriticalMarks}\-\@\x{ac}]+))(?:[\'\x{2018}\x{2019}]s)?$';
}
( run in 1.126 second using v1.01-cache-2.11-cpan-14f38c9f855 )