#! /usr/bin/perl -w use strict; use warnings; use Mojo::DOM; use File::Slurp 'slurp'; use Data::Dumper; my $fileParole = shift; my $neg="not"; my $neg1="no"; my $debug=shift; my %HOH; my %HOA; my %HOE; my $dom = Mojo::DOM->new->parse(scalar do { local $/; }); my($entry,$lemma,$pos,$id,$ref,$mod); my @negval; my $negvalues; my $notref; #my $ref1; my $parolaNO=0; my($entry1,$lemma1,$pos1,$id1,$ref1,$mod1); my $neglemma; my $newchunk=""; my $negentry; my $i = 0; my $line; my @values; my @fields; my $el; my $parolaNeg; open (INPUT2,$fileParole) or die $!; my $filepos = "positive.txt"; my $fileneg ="negative.txt"; open OUTPOS,">$filepos"; open OUTNEG,">$fileneg"; while () { my ($word1, $word2)= split('\t', $_); chomp ($word1); chomp ($word2); $HOA{$word1} ="${word2}"; $HOA{$word2} ="${word1}"; } my $negazione=0; my $aggettivo=0; my $idagg; my $idneg; my $parolaAnalisi=""; for my $chunk ( $dom->find('s')->each ) { $i++; @values = split('\n', $chunk); foreach my $val(@values){ if (($val =~ m//)||($val =~ m/<\/s>/)) { next; } ($entry,$lemma,$pos,$id,$ref,$mod)= split('\t', $val); #$parolaAnalisi=$lemma; $entry =~ s/^\s+|\s+$//g; $lemma =~ s/^\s+|\s+$//g; $pos =~ s/^\s+|\s+$//g; #print "LEMMA: ".$lemma. " REF: ".$ref."\n"; if(($lemma =~ m/^no$/)||($lemma =~ m/^not$/)){ $idneg=$ref; } if ((exists $HOA{$lemma})&&($pos=~ m/^JJ$/)) { $parolaAnalisi=$lemma; $aggettivo=1; $idagg=$ref; $parolaNeg=$lemma; #print "ID AGG= ".$idagg."\n"; #print "ID NEG= ".$idneg."\n"; if ($idneg == $idagg) { $negazione=1; #next; #print "NEGAZIONE TROVATA\n"; } } } #$i++; if (($aggettivo==1)&&($negazione==0)) { $HOH{$i}="${chunk}"; } #print "I: ".$i."\n"; if (($aggettivo==1)&&($negazione==1)) { foreach $negvalues(@values){ chomp $negvalues; ($entry1,$lemma1,$pos1,$id1,$ref1,$mod1)= split('\t', $negvalues); #print $negvalues."\n"; if (($negvalues =~ m/not/)||($negvalues =~ m/no/)) { next; } if($negvalues =~ m/$parolaAnalisi/){ #print "NOTREF: ".$notref."\n"; $negentry="not_".$entry1; $neglemma="not_".$lemma1; #print "TRUE\n"; $newchunk=$newchunk.$negentry."\t".$neglemma."\t".$pos1."\t".$id1."\t".$ref1."\t".$mod1."\n"; } else { $newchunk=$newchunk.$negvalues."\n"; } } $HOE{$i}="${newchunk}"; # print "$newchunk\n"; $newchunk=""; } $aggettivo=0; $negazione=0; } while (my ($k,$v) = each %HOH ) { print OUTPOS "$v\n"; } while (my ($ka,$va) = each %HOE ) { print OUTNEG "$va"; }