blob: fd0b9c41c8fc8880b7e7f3b9edc60b0d7976f072 [file] [log] [blame]
package KorAP::XML::Annotation::Mate::MorphoAttr;
use KorAP::XML::Annotation::Base;
# This attaches morphological information as attributes to the pos
sub parse {
my $self = shift;
$$self->add_tokendata(
foundry => 'mate',
layer => 'morpho',
cb => sub {
my ($stream, $token) = @_;
my $mtt = $stream->pos($token->get_pos);
my $content = $token->get_hash->{fs}->{f};
my ($found, $pos, $msd, $tui);
my $capital = 0;
my $mt;
foreach my $f (@{$content->{fs}->{f}}) {
#pos
if (($f->{-name} eq 'pos') && ($found = $f->{'#text'})) {
$pos = $found;
}
# lemma
elsif (($f->{-name} eq 'lemma')
&& ($found = $f->{'#text'})
&& $found ne '--') {
$mtt->add_by_term('mate/l:' . $found);
}
# MSD
elsif (($f->{-name} eq 'msd') &&
($found = $f->{'#text'}) &&
($found ne '_')) {
$msd = $found;
$tui = $mtt->id_counter;
};
};
$mt = $mtt->add_by_term('mate/p:' . $pos);
# There are attributes needed
if ($tui) {
$mt->set_pti(128);
$mt->set_payload('<s>' . $tui);
};
# MSD
if ($msd) {
foreach (split '\|', $msd) {
my ($x, $y) = split "=", $_;
# case, tense, number, mood, person, degree, gender
$mt = $mtt->add_by_term('@:' . $x . ($y ? '=' . $y : ''));
$mt->set_pti(16);
$mt->set_payload('<s>' . $tui);
};
};
}) or return;
return 1;
};
sub layer_info {
['mate/l=tokens', 'mate/p=tokens']
};
1;