blob: 9f7930592b3f187830f2d96e6218b921b9cfb02f [file] [log] [blame]
package KorAP::XML::Annotation::Connexor::Morpho;
use KorAP::XML::Annotation::Base;
our %MAP = (
'v_ind' => 'mood',
'v_imp' => 'mood',
'v_sub' => 'mood',
'v_fin' => 'inf',
'v_pcp' => 'inf',
'v_pres' => 'tense',
'v_past' => 'tense',
'v_prog' => 'tense',
'v_perf' => 'tense',
'n_abbr' => 'type',
'n_prop' => 'type',
'n_pl' => 'type',
'a_cmp' => 'degree',
'a_sub' => 'degree',
'num_ord' => 'type'
);
sub parse {
my $self = shift;
$$self->add_tokendata(
foundry => 'connexor',
layer => 'morpho',
cb => sub {
my ($stream, $token) = @_;
my $mtt = $stream->pos($token->pos);
my $content = $token->hash->{fs}->{f};
my $found;
my $features = $content->{fs}->{f};
for my $f (@$features) {
# Lemma
if (($f->{-name} eq 'lemma') && ($found = $f->{'#text'})) {
if (index($found, "\N{U+00a0}") >= 0) {
foreach (split(/\x{00A0}/, $found)) {
$mtt->add(
term => 'cnx/l:' . $_
);
}
}
else {
$mtt->add(
term => 'cnx/l:' . $found
);
};
}
# POS
elsif (($f->{-name} eq 'pos') && ($found = $f->{'#text'})) {
$mtt->add(
term => 'cnx/p:' . $found
);
}
# MSD
# This could follow
# http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
elsif (($f->{-name} eq 'msd') && ($found = $f->{'#text'})) {
foreach (split(':', $found)) {
$mtt->add(
term => 'cnx/m:' . $_
);
};
};
};
}
) or return;
return 1;
};
sub layer_info {
['cnx/l=tokens', 'cnx/p=tokens', 'cnx/m=tokens'];
};
1;