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 )