#!/usr/bin/perl -w
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "pt_PT");
use locale;
require "/linguateca/ferramentas/biblioteca_acdc.pl";
$corpus="TODOS";
#$corpus="LITERATECA";
$semvagos=0;

if ($ARGV[0] eq "-h") { print <<FIM;

ACDC_REDE_EMOCOES
Programa que conta os casos de co-ocorrência de emoções distintas nos corpos, 
criando uma tabela LaTeX

Chamada: $0 [-c corpo -s ] < ficheiro de entrada

                                      DMS, 8 de novembro de 2021

FIM
exit;
} elsif ($ARGV[0] eq "-c") {
    shift;
    $corpus=$ARGV[0];
    shift;
    if ($ARGV[0] eq "-s") {
	shift;
	$semvagos=1;
    }	
}
# 
open(RES,">matriz$corpus") or die "Não consegui abrir a matriz\n";
$i=0;

foreach $emocaoi ("alivio", "admirar", "amor", "ausencia", "coragem", "desejo", "desespero", "esperanca", "feliz", "furia", "gen", "grato", "humildade", "infeliz", "ingrato", "insatisfeito", "inveja", "medo", "odio", "orgulho", "outra", "pena", "satisfeito", "saudade", "surpresa", "vergonha") {
    $emo[$i]=$emocaoi;
    $j=0;
    foreach $emocaoj ("alivio", "admirar", "amor", "ausencia", "coragem", "desejo", "desespero", "esperanca", "feliz", "furia", "gen", "grato", "humildade", "infeliz", "ingrato", "insatisfeito", "inveja", "medo", "odio", "orgulho", "outra", "pena", "satisfeito", "saudade", "surpresa", "vergonha") {
	if ($j gt $i) {
	    print "Procurando $emocaoi e $emocaoj...\n";
	    open(FCOM, "> comandoscqp") or die "Não consegui abrir comandoscqp\n";
	    if ($semvagos) {
		print FCOM "set c 1 s;\nset as off;\nMU (meet [sema=\"(.*_)*emo:$emocaoi(_.*)*\" & sema!=\".*emo.*emo.*\"] [sema=\"(.*_)*emo:$emocaoj(_.*)*\" & sema!=\".*emo.*emo.*\"] s);\nsize Last;\n";
	    } else {
		print FCOM "set c 1 s;\nset as off;\nMU (meet [sema=\"(.*_)*emo:$emocaoi(_.*)*\"] [sema=\"(.*_)*emo:$emocaoj(_.*)*\"] s);\nsize Last;\n";
	    }
	    close(FCOM);
	    open(COM, "cqp -D $corpus -f comandoscqp |");
	    $tamanho=<COM>;
	    chop($tamanho);
	    close(COM);
	    print RES "$emocaoi\t$emocaoj\t$tamanho\n";
	    $coorr[$i][$j]=$tamanho;
	} elsif ($i eq $j) {
	    print "Procurando $emocaoi e $emocaoj...\n";
	    open(FCOM, "> comandoscqp") or die "Não consegui abrir comandoscqp\n";
	    if ($semvagos) {


		print FCOM "set c 1 s;\nset as off;\na:[sema=\"(.*_)*emo:$emocaoi(_.*)*\" & sema!=\".*emo.*emo.*\"] []* b:[sema=\"(.*_)*emo:$emocaoj(_.*)*\" & sema!=\".*emo.*emo.*\"]::a.lema!=b.lema within s;\nsize Last;\n";
	    } else {
		print FCOM "set c 1 s;\nset as off;\na:[sema=\"(.*_)*emo:$emocaoi(_.*)*\"] []* b:[sema=\"(.*_)*emo:$emocaoj(_.*)*\"]::a.lema!=b.lema within s;\nsize Last;\n";
	    }
	    close(FCOM);
	    open(COM, "cqp -D $corpus -f comandoscqp |");
	    $tamanho=<COM>;
	    chop($tamanho);
	    close(COM);
	    print RES "$emocaoi\t$emocaoj\t$tamanho\n";
	    $coorr[$i][$j]=$tamanho;
	}
	$j++;
    }
    $i++;
}
close(RES);

open (MATMAT, ">matrizmatriz$corpus.R") or die "não consegui abrir matrizmatriz";
$tam=$i;
for ($i=0;$i<$tam;$i++){
    print MATMAT $emo[$i], " ";
    for ($j=0;$j<$tam;$j++){
	if ($coorr[$i][$j]) {
	    print MATMAT $coorr[$i][$j], " " ;
	} else {
	    print MATMAT $coorr[$j][$i], " ";
	}
    }
    print MATMAT "\n";
}
close(MATMAT);

# este programa também deve obter os valores absolutos da ocorrência de emoções
#open(COM, "cwb-lexdecode -f -P sema literateca | grep emo: |");
open(COM, "cwb-lexdecode -f -P sema todos | grep emo: |");
while (<COM>) {
    ($tamanho, $emos)=($_=~m/^\s*([0-9]+)\s+(.*)\n$/);
#    print "$emos\t$tamanho\n";
    @semas=split /_/, $emos;
#    print "Número: $#semas\n";
 #   print "$semas[0]\n";
    for ($i=0; $i<=$#semas; $i++ ) {
#	print "$i -- $semas[$i]\n";
	if ($semas[$i] =~/emo:/) {
	    $semas[$i]=~ s/\s*emo://g;
#	    print "$semas[$i]\t$tamanho\t $tamanhos{$semas[$i]}\n";
	    $tamanhos{$semas[$i]}+=$tamanho;
	}
    }
}
close(COM);

#print "Acabei...\n";
@nomes=("alivio", "admirar", "amor", "ausencia", "coragem", "desejo", "desespero", "esperanca", "feliz", "furia", "gen", "grato", "humildade", "infeliz", "ingrato", "insatisfeito", "inveja", "medo", "odio", "orgulho", "outra", "pena", "satisfeito", "saudade", "surpresa", "vergonha");

open(LEXICO, ">lexico$corpus") or die "Não consegui abrir lexico!"; 
foreach $nome (sort keys %tamanhos) {
    print LEXICO "$nome\t$tamanhos{$nome}\n";
}
close(LEXICO);
exit(0);
open(REDE,">redelatex") or die "Não consegui abrir redelatex!"; 
   
foreach $i (0..20) {
    print REDE $nomes[$i], " & ";
#    $coorr[$i][$i]="-";
    foreach $j (0..20) {
	print $coorr[$i][$j], "\t";
	print REDE $coorr[$i][$j], " & ";
    }
    print "\n";
    print REDE "\\\\ \n";
}
close(REDE);
