blob: 0d8742bc340e2517ebadd150f58e600bef59497b [file] [log] [blame]
package KorAP::Field::MultiTermToken;
use KorAP::Field::MultiTerm;
use Mojo::Base -base;
use List::MoreUtils 'uniq';
has [qw/o_start o_end/];
sub add {
my $self = shift;
my $mt;
unless (ref $_[0] eq 'MultiTerm') {
if (@_ == 1) {
$mt = KorAP::Field::MultiTerm->new(term => shift());
}
else {
$mt = KorAP::Field::MultiTerm->new(@_);
};
}
else {
$mt = shift;
};
$self->{mt} //= [];
push(@{$self->{mt}}, $mt);
return $mt;
};
# Return a new term id
sub id_counter {
$_[0]->{id_counter} //= 1;
return $_[0]->{id_counter}++;
};
sub surface {
substr($_[0]->{mt}->[0]->term,2);
};
sub lc_surface {
substr($_[0]->{mt}->[1]->term,2);
};
sub to_string {
my $self = shift;
my $string = '[(' . $self->o_start . '-'. $self->o_end . ')';
$string .= join ('|', map($_->to_string, @{$self->{mt}}));
$string .= ']';
return $string;
};
sub to_array {
my $self = shift;
[uniq(map($_->to_string, @{$self->{mt}}))];
};
sub to_solr {
my $self = shift;
my @array = map { $_->to_solr(0) } @{$self->{mt}};
$array[0]->{i} = 1;
return \@array;
};
1;
__END__
[
{
"e":128,
"i":22,
"p":"DQ4KDQsODg8=",
"s":123,
"t":"one",
"y":"word"
},
{
"e":8,
"i":1,
"s":5,
"t":"two",
"y":"word"
},
{
"e":22,
"i":1,
"s":20,
"t":"three",
"y":"foobar"
}
]