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 )