Lingua-Ogmios
view release on metacpan or search on metacpan
lib/Lingua/Ogmios/NLPWrappers/Wrapper.pm view on Meta::CPAN
last;
}
}
if ($pattern->[$i]->{'type'} eq "term") {
if ($term = $self->_searchTerm($document, $$start_token, $sentence_end_token, $wordSize)) {
# print STDERR "found " . $word->getForm . "(TERM)\n";
push @patternElements, $term;
$$start_token = $term->end_token->next;
$found = 1;
# next;
} else {
# print "word not found\n";
$found = 0;
last;
}
}
if ($pattern->[$i]->{'type'} eq "termContent") {
if ($term = $self->_searchTermContent($document, $$start_token, $sentence_end_token, $pattern->[$i]->{"termContent"}, $wordSize)) {
# print STDERR "found " . $word->getForm . "(TERMCONTENT)\n";
push @patternElements, $term;
$$start_token = $term->end_token->next;
$found = 1;
# next;
} else {
# print "word not found\n";
$found = 0;
last;
}
}
if ($pattern->[$i]->{'type'} eq "chunk") {
# print "i = $i (" . $pattern->[$i]->{'type'} . ")\n";
if ($found = $self->_searchPattern($document, $start_token, $sentence_end_token, {'pattern' => $pattern->[$i]->{"chunk"}}, $wordSize, $semfGuessing, $level + 1, $terms, $function_pointer, $args)) {
## push @patternElements, $term;
$found = 1;
# print STDERR "chunk found $found\n";
} else {
# print "chunk not found\n";
$found = 0;
last;
}
}
if ($pattern->[$i]->{'type'} eq "syndep") {
if (scalar (@patternElements) > 0) {
$syndep_start_token = $patternElements[0]->start_token;
}
if ($self->_searchSynDep($document, $syndep_start_token, $sentence_end_token, $pattern->[$i]->{'syndep'}, $wordSize, \@patternElements, $terms)) {
# print STDERR "syndep found\n";
$found = 1;
} else {
# print "i = $i (" . $pattern->[$i]->{'type'} . ")\n";
$found = 0;
last;
}
}
}
# print STDERR "($level - $found)\n";
if (($level == 0) && ($found == 1)) { # ($i == scalar(@$pattern)) {
# if ($found == 1) { # ($i == scalar(@$pattern)) {
# print STDERR "PATTERN FOUND ($level - $found) - " . $synPattern->{"action"} . "\n";
# my @tmp = split m!/!, $synPattern->{"action"};
&$function_pointer($document, $synPattern->{"action"}, $terms, $args);
# &$function_pointer($document, $synPattern->{"action"}, \@terms, $args);
}
return($found);
}
sub _searchSynDep {
my ($self, $document, $start_token, $end_token, $syndep, $WindowSize, $patternElements, $terms) = @_;
my $token = $start_token;
my $synrel;
my $currentWindowSize = 0;
my $phrase;
if (scalar(@$terms) == 0) {
return(0);
}
my $term_start_token = $terms->[0]->start_token;
my $term_end_token = $terms->[0]->end_token;
my %postags = ("DT" => 1, "IN" => 1);
# warn "====> " . $terms->[0]->getForm . "\n";
if (ref($terms->[0]) eq "Lingua::Ogmios::Annotations::SemanticUnit") {
if (($terms->[0]->reference_name eq "refid_word") ||
($terms->[0]->reference_name eq "refid_phrase")) {
$phrase = $terms->[0]->reference;
} elsif ($document->getAnnotations->getWordLevel->existsElementFromIndex("list_refid_token", $terms->[0]->start_token->getId)) {
$phrase = $document->getAnnotations->getWordLevel->getElementFromIndex("list_refid_token", $terms->[0]->start_token->getId)->[0];
}
}
# warn "phrase: " . $phrase->getForm . "\n";
foreach $synrel (@{$document->getAnnotations->getSyntacticRelationLevel->getElementFromIndex('syntactic_relation_type', $syndep)}) {
# foreach $synrel (@{$document->getAnnotations->getSyntacticRelationLevel->getElementFromIndex2('refid_head', $phrase)}) {
# foreach $synrel (@{$document->getAnnotations->getSyntacticRelationLevel->getElements}) {
# if ($synrel->syntactic_relation_type eq $syndep) {
# print $start_token->getFrom . " <= " . $synrel->refid_modifier->[0]->start_token->getFrom . "\n";
# print $synrel->refid_modifier->[0]->end_token->getTo . " <= " . $end_token->getTo . "\n";
# print STDERR "syndep\n";
# my %tmp = (ref($synrel->refid_head->[0]) . $synrel->refid_head->[0]->getId => $synrel->refid_head->[0]);
# my @elementChunk = $self->_getChunkFromElement($document, $synrel->refid_modifier->[0], $synrel->refid_head->[0], \%tmp);
# my $elt;
# warn "===\n";
# foreach $elt (keys %tmp) {
# print STDERR "\t$elt : " . $tmp{$elt}->getForm . "\n";
# }
# ? check if the head of syndep is in the found elements at the level n-1
# my $i = -1;
# my $refPatElmt;
# for($i = 0; $i < scalar(@$patternelments); $i++) {
# if ((($refPatElmt eq "Lingua::Ogmios::Annotations::Word" ) ||
# ($refPatElmt eq "Lingua::Ogmios::Annotations::Phrase" )) &&
# (!exists $tmp{$refPatElmt . $patternelments->[$i]->getId})) {
( run in 1.279 second using v1.01-cache-2.11-cpan-71847e10f99 )