Alvis-NLPPlatform

 view release on metacpan or  search on metacpan

lib/Alvis/NLPPlatform/MyReceiver.pm  view on Meta::CPAN

package Alvis::NLPPlatform::MyReceiver;
#use Data::Dumper;


use strict;
use warnings;

use XML::Parser::PerlSAX;
# use utf8;

use Alvis::NLPPlatform::XMLEntities;

use Data::Dumper;

our $VERSION=$Alvis::NLPPlatform::VERSION;

###
### Package
###


my $data;

sub start_document {
#  print Dumper($tab_object);
}

sub end_document {
#  print Dumper($tab_object);
}

#
# init object
#

sub new {
  my $type = shift;

  my @stack_elements = ();
  my $tab_objet = {};
  my $is_in_ann;
#   my $data;
  return bless {"tab_object" => {} , "stack_elements" => \@stack_elements, "is_in_ann" => $is_in_ann, "counter_id" => 0 } , $type;
}

#
# process <..>
#


sub start_element {
  my ($self,$properties) = @_;

  if ($self->{"is_in_ann"}) {
      if ($self->is_empty()) { # new element
	  my $elem = {};
	  push(@{$self->{"stack_elements"}},$elem);
	  $elem->{'kind'} = 'simple';
      } else {
	  my $father = $self->top_stack();
	  my $elem;
	  if ($properties->{'Name'} =~ /^list/) { # detects that it is a list
	      $elem = {}; # hashtable par défaut
	      $elem->{'kind'} = 'list';
	      $elem->{'values'} = []; # tableau
	  } else {
	      $elem = {}; # hashtable par défaut
	      $elem->{'kind'} = 'simple';	
	  }
	  if ($father->{'kind'} eq 'list') {
	      my $tab = $father->{'values'};
	  } else { # complex or simple
	      $father->{'kind'} = 'complex';
	      $father->{$properties->{'Name'}} = $elem;
	  }
	  $elem->{'datatype'} = $properties->{'Name'};
	  push(@{$self->{"stack_elements"}},$elem);
      }
  } else {
      $self->{"is_in_ann"} = $properties->{'Name'} eq 'linguisticAnalysis';

  }
  $data='';
}

sub end_element {
    my ($self,$properties) = @_;
    my $field;
    my $father;
    if ($self->{"is_in_ann"}) {
	$self->{"is_in_ann"} = $properties->{'Name'} ne 'linguisticAnalysis';
	if ($self->{"is_in_ann"}) {
	    my $size=$#{$self->{"stack_elements"}};
	    my $elem = $self->top_stack();
	    if ($size >= 1) {
		if ($properties->{'Name'} eq "named_entity") {
		    if (!exists($elem->{'id'})) {
			my $ftab = $elem->{'values'};
			push (@$ftab, "named_entity" . $self->{"counter_id"});
			$elem->{'id'} = "named_entity" . $self->{"counter_id"};
			$field = 'id';
			$data = "semantic_unit" . $self->{"counter_id"};
			$self->{"counter_id"}++;



( run in 1.472 second using v1.01-cache-2.11-cpan-39bf76dae61 )