#!/usr/bin/perl <<DOC; Axel COURT & Marjorie SEIZOU MAI 2010 usage : perl entites-alchemy.pl <TexteIN> DOC use AlchemyAPI; # Test des paramètres if ($#ARGV != 0) { print "Syntaxe : perl entites-alchemy.pl <TexteIN>\n" ; exit(-1); } # Ouverture du fichier en lecture open (TXT, "<:encoding(UTF-8)", $ARGV[0]) or die ("Impossible d'ouvrir le texte IN : $!\n"); my @texte = <TXT>; close(TXT); #Création d'un objet AlchemyAPI my $alchemyObj = new AlchemyAPI(); # Chargement de la clé API (via un fichier txt api_key.txt) if ($alchemyObj->LoadKey("api_key.txt") eq "error") { die "Error loading API key. Edit api_key.txt and insert your API key."; } my $result = ''; # On lance l'API sur 250 ligne à la fois seulement, pour éviter la surcharge ! my $compteur = 0; while ($compteur < $#texte) { my $phrases = join(/ /,@texte[$compteur .. ($compteur+249)]); # Décodage des entités nommées $result .= $alchemyObj->TextGetRankedNamedEntities($phrases); if ($result ne "error") { print "Tout s'est bien deroule ! Ouais ! *\\o/*\n"; } $compteur = $compteur+250; } %type_entite; %relevance_entite; %count_entite; # Ecriture des résultats open (OUT, ">:encoding(UTF-8)", "decodage-entites-Alchemy.xml") || die ("Impossible d'écrire le fichier de sortie : $!\n"); print OUT '<?xml version="1.0" encoding="UTF-8"?> <results> <status>OK</status> <language>french</language> <entities> '; while($result =~ /<entity>[^<]*?<type>([^<]+?)<\/type>[^<]*?<relevance>([^<]+?)<\/relevance>[^<]*?<count>([^<]+?)<\/count>[^<]*?<text>([^<]+?)<\/text>[^<]*?<\/entity>/gs) { $type_entite{$4} = $1; $relevance_entite{$4} = $2; $count_entite{$4} = $count_entite{$4}+$3; } @keys = sort {$count_entite{$b} <=> $count_entite{$a}} keys %count_entite; foreach $key (@keys) { if ($key ne "") { print OUT "<entity>\n<type>"; print OUT "$type_entite{$key}"; print OUT "</type>\n<relevance>".$relevance_entite{$key}."<\/relevance>\n<count>".$count_entite{$key}."</count>\n<text>".$key."</text>\n</entity>\n"; } } print OUT '</entities> </results>'; close(OUT); exit;