blob: 7824ae3461ed18448fbcc350488a4ed47bd1b55e [file] [log] [blame]
package KorAP::XML::Index::MultiTermTokenStream;
use Mojo::Base -base;
use KorAP::XML::Index::MultiTermToken;
has [qw/oStart oEnd/];
sub add {
my $self = shift;
my $mtt = shift // KorAP::XML::Index::MultiTermToken->new;
$self->{mtt} //= [];
$self->{tui} //= [];
push(@{$self->{mtt}}, $mtt);
return $mtt;
};
sub get_node {
my ($self, $unit, $term) = @_;
if ($unit->type eq 'token') {
my $mtt = $self->pos($unit->pos);
my $node = $mtt->grep_mt($term);
# TODO: Check if term has PTI 128 - or what is wanted!
# TODO: if the node has no TUI - add!
return $node if $node;
my $tui = $self->tui($unit->pos);
return $mtt->add(
term => $term,
pti => 128,
payload => '<s>' . $tui,
tui => $tui
);
}
# Is span
else {
my $mtt = $self->pos($unit->p_start);
my $node = $mtt->grep_mt('<>:' . $term);
# TODO: if the node has no TUI - add!
return $node if $node;
my $tui = $self->tui($unit->p_start);
return $mtt->add(
term => '<>:' . $term,
o_start => $unit->o_start,
o_end => $unit->o_end,
p_start => $unit->p_start,
p_end => $unit->p_end,
pti => 64,
payload => '<b>0<s>' . $tui,
tui => $tui
);
};
};
sub add_meta {
my $self = shift;
my $pos_0 = $self->pos(0) or return;
my $mt = $pos_0->add('-:' . shift);
$mt->payload(shift);
$mt->store_offsets(0);
};
sub pos {
my $self = shift;
my $pos = shift;
return unless defined $pos;
return $self->{mtt}->[$pos];
};
sub to_string {
my $self = shift;
return join("\n" , map { $_->to_string } @{$self->{mtt}}) . "\n";
};
sub multi_term_tokens {
$_[0]->{mtt};
};
sub tui {
my $self = shift;
my $pos = shift;
return unless defined $pos;
return ++$self->{tui}->[$pos];
};
sub to_array {
my $self = shift;
[ map { $_->to_array } @{$self->{mtt}} ];
};
sub to_solr {
my $self = shift;
[ map { $_->to_solr } @{$self->{mtt}} ];
};
1;