1. #!/usr/bin/perl
  2. use Unicode::String qw(utf8);
  3. use XML::XPath;
  4. use XML::LibXML;
  5. use Tk;
  6. use Tk::DropSite 'Win32';
  7. use Tk::Text;
  8.  
  9. my $mw = MainWindow->new( -background => '#E0F0FF', );
  10.  
  11. $mw->Label(
  12.   -text       => 'Script_RegExp : Faire un glisser-deposer du repertoire a traiter avec le script contenant des expressions regulieres',
  13.   -background => '#E0F0FF',
  14. )->pack(qw/ -side top -pady 2/);
  15.  
  16. my $widgetRegExp= $mw->Scrolled(
  17.   'Text',
  18.   -background => 'white',
  19.   -scrollbars => 'osoe',
  20.   -wrap       => 'none',
  21.   -height     => 7,
  22. )->pack(qw/ -side top -pady 2/);
  23.  
  24. $mw->Label(
  25.   -text       => 'Script_LibXml : Faire un glisser-deposer du repertoire a traiter avec le script utilisant le module XML::LibXML',
  26.   -background => '#E0F0FF',
  27. )->pack(qw/ -pady 2/);
  28.  
  29. my $widgetLibXml = $mw->Scrolled(
  30.   'Text',
  31.   -background => 'white',
  32.   -scrollbars => 'osoe',
  33.   -wrap       => 'none',
  34.   -height     => 7,
  35. )->pack(qw/ -pady 2 /);
  36.  
  37. $mw->Label(
  38.   -text       => 'Script_XmlXpath : Faire un glisser-deposer du repertoire a traiter avec le script utilisant le module XML::XPath',
  39.   -background => '#E0F0FF',
  40. )->pack(qw/ -pady 3/);
  41.  
  42. my $widgetXmlXpath = $mw->Scrolled(
  43.   'Text',
  44.   -background => 'white',
  45.   -scrollbars => 'osoe',
  46.   -wrap       => 'none',
  47.   -height     => 7,
  48. )->pack(qw/ -pady 3 /);
  49.  
  50.  
  51. # Conception du glisser-déposer
  52. $widgetRegExp->DropSite(
  53.   -dropcommand => [ \&ActionDrop_regexp, $widgetRegExp],
  54.   -droptypes   => 'Win32',
  55. );
  56. $widgetLibXml->DropSite(
  57.   -dropcommand => [ \&ActionDrop_libxml, $widgetLibXml],
  58.   -droptypes   => 'Win32',
  59. );
  60. $widgetXmlXpath->DropSite(
  61.   -dropcommand => [ \&ActionDrop_xpath, $widgetXmlXpath],
  62.   -droptypes   => 'Win32',
  63. );
  64. MainLoop;
  65.  
  66. sub ActionDrop_regexp {
  67.   my ( $widgetRegExp ) = @_;
  68.  
  69.   my $sel = $widgetRegExp->SelectionGet( -selection => 'CLIPBOARD' );
  70.   foreach my $fichier_rep ( split( /\n/, $sel ) ) {
  71.     $widgetRegExp->insert( 'end', "$fichier_rep\n" );
  72.     $widgetRegExp->SelectionOwn(-command=>&RegExp($fichier_rep));
  73.   }
  74.   return;
  75. }
  76.  
  77. sub ActionDrop_libxml {
  78.   my ( $widgetLibXml ) = @_;
  79.  
  80.   my $sel = $widgetLibXml->SelectionGet( -selection => 'CLIPBOARD' );
  81.   foreach my $fichier_rep ( split( /\n/, $sel ) ) {
  82.     $widgetLibXml->insert( 'end', "$fichier_rep\n" );
  83.     $widgetLibXml->SelectionOwn(-command=>&LibXml($fichier_rep));
  84.   }
  85.   return;
  86. }
  87.  
  88. sub ActionDrop_xpath {
  89.   my ( $widgetXmlXpath ) = @_;
  90.  
  91.   my $sel = $widgetXmlXpath->SelectionGet( -selection => 'CLIPBOARD' );
  92.   foreach my $fichier_rep ( split( /\n/, $sel ) ) {
  93.     $widgetXmlXpath->insert( 'end', "$fichier_rep\n" );
  94.     $widgetXmlXpath->SelectionOwn(-command=>&Xpath($fichier_rep));
  95.   }
  96.   return;
  97. }
  98.  
  99.  
  100. #################################################################
  101. #---------- RegExp ---------------------------------------------
  102. #################################################################
  103. sub RegExp {
  104. my $rep = $_[0] || '';
  105. $rep=~ s/[\/]$//;
  106.  
  107. my $dossier = $rep;
  108. $dossier =~ s/.+\\(.+)$/$1/;
  109.  
  110. mkdir("resultat_regxp_$dossier");
  111. mkdir("./resultat_regxp_$dossier/resultat");
  112. mkdir("./resultat_regxp_$dossier/cordial");
  113. mkdir("./resultat_regxp_$dossier/cordial/fichiers");
  114.  
  115. my %tabcontenu = ();
  116.  
  117. #-----------------------------------------------------------------
  118. &parcoursarborescencefichiers_RegExp($rep,$dossier);    #recurse!
  119. #------------------------------------------------------------------
  120.  
  121. $cheminrep ="./resultat_regxp_$dossier/resultat";
  122. opendir(DIRS,$cheminrep) or die "can't open $cheminrep: $!\n";
  123. my @files = readdir(DIRS);
  124. closedir(DIRS);
  125. foreach my $file(@files){
  126.     next if $file =~ /^\.\.?$/;
  127.             if($file =~/\.xml$/){
  128.                 open(OUT,">>:encoding(utf-8)","./resultat_regxp_$dossier/resultat/$file");
  129.                 print OUT "</file>\n";
  130.                 close(OUT);
  131.             }
  132.         if($file=~/\.txt$/){
  133.     open(IN,"<:encoding(utf8)","./resultat_regxp_$dossier/resultat/$file");
  134.     open (OUT4, ">:encoding(iso-8859-1)","./resultat_regxp_$dossier/cordial/iso_$file");
  135.     while(<IN>){
  136.          print OUT4 $_;
  137.     }
  138.         close (OUT4);
  139.         close (IN);
  140.     }
  141. }
  142.  
  143. my $methode = "regxp";
  144. $cordial="./resultat_regxp_$dossier/cordial";
  145. opendir(COR, $cordial) or die "can't open $path: $!\n";
  146. my @fics = readdir(COR);
  147. closedir(COR);
  148. foreach my $fich(@fics){
  149.     next if $fich =~ /^\.\.?$/;
  150.     &decoupe($fich,$dossier,$methode); # Procédure qui permet un fichier en plusieurs fichiers de 2Mo
  151. }
  152.  
  153. system("del texteaetiqueter.txt");
  154. system("del treetagger.txt");
  155. system("del treetagger.txt.xml");
  156.  
  157. $response = $mw->messageBox(-icon => 'info', -message => 'Extraction terminée !', -title => 'Extraction finie', -type => 'OK');
  158.  
  159. }
  160.  
  161. sub parcoursarborescencefichiers_RegExp {
  162.     my $path = shift(@_);
  163.     my $dossier = shift(@_);
  164.    
  165.     opendir(DIR, $path) or die "can't open $path: $!\n";
  166.     my @files = readdir(DIR);
  167.     closedir(DIR);
  168.  
  169.     foreach my $file (@files) {
  170.         next if $file =~ /^\.\.?$/;
  171.         $file = $path."/".$file;
  172.         if (-d $file) {
  173.             &parcoursarborescencefichiers_RegExp($file);    #recurse!
  174.         }
  175.         if (-f $file) {
  176.             if(($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/) && ($file !~/0,2-3404,1-0,0\.xml$/)) {
  177.             my $rubrique="";
  178.             my $encodage = "";
  179.             my $encodagesortie="utf-8";
  180.             my $texte="";
  181.             if (-z $file) {
  182.                 print "$file est vide: pas de traitement\n";
  183.             }else{
  184.                     open(FIC,$file);
  185.                     while (my $ligne=<FIC>) {
  186.                     $ligne =~ s/\n//g;
  187.                     if($ligne =~/(iso-8859-1|utf-8)/ig){
  188.                         $encodage = $1;
  189.                     }
  190.                 }          
  191.                 close(FIC);
  192.            
  193.                 open(FILE,"<:encoding($encodage)",$file);
  194.                 while (my $ligne=<FILE>){
  195.                     $ligne =~ s/\n//g;
  196.                     $texte .= $ligne;
  197.                     }
  198.                  close(FILE);
  199.                     if ($texte=~/<channel><title>([^<]+)<\/title>/){
  200.                         $rubrique = $1;  
  201.                         $rubrique=~s/é/e/gi;
  202.                         $rubrique=~s/è/e/gi;
  203.                         $rubrique=~s/ê/e/gi;
  204.                         $rubrique=~s/à/a/gi;
  205.                         $rubrique=~s/es /e/i;
  206.                         $rubrique=~ s/Le ?Monde.fr ?://;
  207.                         $rubrique=~ s/ ?- ?Le ?Monde.fr//;
  208.                         $rubrique=~ s/es$/e/i;
  209.                         $rubrique=~ s/ //g;
  210.                         $rubrique=uc($rubrique);
  211.                     }
  212.                                
  213.                 if($rubrique eq ""){
  214.                     $rubrique = "non-classe";
  215.                 }  
  216.                
  217.                 open(OUT1,">>:encoding(utf-8)","./resultat_regxp_$dossier/resultat/$rubrique.txt");
  218.                 open(OUT2,">>:encoding(utf-8)","./resultat_regxp_$dossier/resultat/$rubrique.xml");
  219.                 open(OUT3,">>:encoding(utf-8)","./resultat_regxp_$dossier/resultat/$rubrique-treetagger.xml");
  220.                 if(-z OUT2){   
  221.                     print OUT2 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
  222.                     print OUT2 "<file>\n";
  223.                     print OUT2 "<name>$ARGV[0]</name>\n";
  224.                 }
  225.                     if(-z OUT3){   
  226.                     print OUT3 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
  227.                     print OUT3 "<file>\n";
  228.                     print OUT3 "<name>$ARGV[0]</name>\n";
  229.                 }
  230.                 $texte =~ s/> *</></g;
  231.                 $texte=~/<pubDate>([^<]+)<\/pubDate>/;
  232.                 my $date=$1;
  233.                 if (uc($encodage) ne "UTF-8") {utf8($date);}
  234.                 print OUT2 "<date>".$date."</date>\n";
  235.                 print OUT2 "<items>\n";
  236.                 print OUT3 "<date>".$date."</date>\n";
  237.                 print OUT3 "<items>\n";
  238.                 while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g) {
  239.                     my $titre=$1;
  240.                     my $resume=$2;
  241.                     my $test = $titre;
  242.                     if(!exists $tabcontenu{$test}){
  243.                         if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
  244.                             $titre = &nettoietexte($titre);
  245.                             $resume = &nettoietexte($resume);
  246.                             my ($titreetiquete, $resumeetiquete) = &etiquetage ($titre, $resume);
  247.                             print OUT1 "Titre : $titre \n";
  248.                             print OUT1 "Resume : $resume \n";
  249.                             print OUT2 "<item><title>$titre</title><abstract>$resume</abstract></item>\n";
  250.                             print OUT3 "<item>\n<title>\n$titreetiquete</title>\n<abstract>\n$resumeetiquete</abstract>\n</item>\n";
  251.                             $tabcontenu{$test}++;
  252.                         }
  253.                     }
  254.                 print OUT2 "</items>\n";
  255.                 print OUT3 "</items>\n";
  256.                 close(OUT1);
  257.                 close(OUT2);
  258.                 close(OUT3);
  259.                 }
  260.             }
  261.         }
  262.     }
  263. }
  264.  
  265. #################################################################
  266. #---------- LibXml ---------------------------------------------
  267. #################################################################
  268. sub LibXml {
  269. my $rep = $_[0] || '';
  270. $rep=~ s/[\/]$//;
  271.  
  272. my $dossier = $rep;
  273. $dossier =~ s/.+\\(.+)$/$1/;
  274.  
  275. mkdir("resultat_libxml_$dossier");
  276. mkdir("./resultat_libxml_$dossier/resultat");
  277. mkdir("./resultat_libxml_$dossier/cordial");
  278. mkdir("./resultat_libxml_$dossier/cordial/fichiers");
  279.  
  280. my %tabcontenu = ();
  281.  
  282. #-----------------------------------------------------------------
  283. &parcoursarborescencefichiers_LibXml($rep,$dossier);    #recurse!
  284. #------------------------------------------------------------------
  285.  
  286. $cheminrep ="./resultat_libxml_$dossier/resultat";
  287. opendir(DIRS,$cheminrep) or die "can't open $cheminrep: $!\n";
  288. my @files = readdir(DIRS);
  289. closedir(DIRS);
  290. foreach my $file(@files){
  291.     next if $file =~ /^\.\.?$/;
  292.             if($file =~/\.xml$/){
  293.                 open(OUT,">>:encoding(utf-8)","./resultat_libxml_$dossier/resultat/$file");
  294.                 print OUT "</file>\n";
  295.                 close(OUT);
  296.             }
  297.         if($file=~/\.txt$/){
  298.     open(IN,"<:encoding(utf8)","./resultat_libxml_$dossier/resultat/$file");
  299.     open (OUT4, ">:encoding(iso-8859-1)","./resultat_libxml_$dossier/cordial/iso_$file");
  300.     while(<IN>){
  301.          print OUT4 $_;
  302.     }
  303.         close (OUT4);
  304.         close (IN);
  305.     }
  306. }
  307.  
  308. my $methode = "libxml";
  309. $cordial="./resultat_libxml_$dossier/cordial";
  310. opendir(COR, $cordial) or die "can't open $path: $!\n";
  311. my @fics = readdir(COR);
  312. closedir(COR);
  313. foreach my $fich(@fics){
  314.     next if $fich =~ /^\.\.?$/;
  315.     &decoupe($fich,$dossier,$methode); # Procédure qui permet un fichier en plusieurs fichiers de 2Mo
  316. }
  317.  
  318. system("del texteaetiqueter.txt");
  319. system("del treetagger.txt");
  320. system("del treetagger.txt.xml");
  321.  
  322. $response = $mw->messageBox(-icon => 'info', -message => 'Extraction terminée !', -title => 'Extraction finie', -type => 'OK');
  323.  
  324. }
  325.  
  326. sub parcoursarborescencefichiers_LibXml {
  327.     my $path = shift(@_);
  328.     my $dossier = shift(@_);
  329.    
  330.     opendir(DIR, $path) or die "can't open $path: $!\n";
  331.     my @files = readdir(DIR);
  332.     closedir(DIR);
  333.     foreach my $file (@files) {
  334.         next if $file =~ /^\.\.?$/;
  335.         $file = $path."/".$file;
  336.         if (-d $file) {
  337.             &parcoursarborescencefichiers_LibXml($file);    #recurse!
  338.         }
  339.         if (-f $file) {
  340.             if(($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/) && ($file !~/0,2-3404,1-0,0\.xml$/)){
  341.             my $encodage = "";
  342.             my $encodagesortie="utf-8";
  343.             my $texte="";
  344.             if(-z $file){
  345.                 print "$file est vide pas de traitement\n";
  346.             }else{
  347.                 open(FIC,$file);
  348.                 while (my $ligne=<FIC>) {
  349.                     $ligne =~ s/\n//g;
  350.                     if($ligne =~/(iso-8859-1|utf-8)/ig){
  351.                         $encodage = $1;
  352.                     }
  353.                 }
  354.                 close(FIC);
  355.                 open(FILE,"<:encoding($encodage)", $file);
  356.                 my $texte="";
  357.                 while (my $ligne=<FILE>) {
  358.                     $ligne =~ s/\n//g;
  359.                     $ligne =~ s/\r//g;
  360.                     $texte .= $ligne;
  361.                    
  362.                 }
  363.                 close(FILE);
  364.                
  365.                 if($texte =~/<channel><title>([^<]+)<\/title>/ig){
  366.                     $rubrique = $1;
  367.                     $rubrique=~s/é/e/gi;
  368.                     $rubrique=~s/è/e/gi;
  369.                     $rubrique=~s/ê/e/gi;
  370.                     $rubrique=~s/à/a/gi;
  371.                     $rubrique=~ s/Le ?Monde.fr ?://;
  372.                     $rubrique=~s/ ?- ?Le ?Monde\.fr//;
  373.                     $rubrique=~s/es$/e/i;
  374.                     $rubrique=~ s/ //g;
  375.                     $rubrique=uc($rubrique);
  376.                 }
  377.                                
  378.                 if($rubrique eq ""){
  379.                     $rubrique = "NONCLASSE";
  380.                 }
  381.                 open(OUT1,">>:encoding(utf-8)","./resultat_libxml_$dossier/resultat/$rubrique.txt");
  382.                 open(OUT2,">>:encoding(utf-8)","./resultat_libxml_$dossier/resultat/$rubrique.xml");
  383.                 open(OUT3,">>:encoding(utf-8)","./resultat_libxml_$dossier/resultat/$rubrique-treetagger.xml");
  384.                 if(-z OUT2){
  385.                     print OUT2 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
  386.                     print OUT2 "<file>\n";
  387.                     print OUT2 "<name>$ARGV[0]</name>\n";
  388.                 }
  389.                     if(-z OUT3){   
  390.                     print OUT3 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
  391.                     print OUT3 "<file>\n";
  392.                     print OUT3 "<name>$ARGV[0]</name>\n";
  393.                 }
  394.                 print OUT2 "<items>\n";
  395.                 print OUT3 "<items>\n";
  396.            
  397.                 my $input_file= $file;
  398.                 my $parser = XML::LibXML->new();
  399.                 my $xp = $parser->parse_file($input_file);
  400.                 my $date = "";
  401.                 foreach my $noeud_date ( $xp->findnodes('//channel')->get_nodelist ) {
  402.                     $date=$noeud_date->findnodes('//pubDate')->string_value;
  403.                     if (uc($encodage) ne "UTF-8") {utf8($date);}
  404.                 }
  405.                 print OUT2 "<date>$date</date>\n";
  406.                 print OUT3 "<date>\n$date</date>\n";
  407.                
  408.                 foreach my $noeud ( $xp->findnodes('//item')->get_nodelist ) {
  409.                     my $titre=$noeud->findnodes('title')->string_value;
  410.                     my $resume=$noeud->findnodes('description')->string_value;             
  411.                     my $test=$titre;
  412.                     if(!exists $tabcontenu{$test}){
  413.                         if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
  414.                         $titre=&nettoietexte($titre);
  415.                         $resume=&nettoietexte($resume);
  416.                         my ($titreetiquete, $resumeetiquete) = &etiquetage ($titre, $resume);
  417.  
  418.                         print OUT1 "Titre : $titre \n";
  419.                         print OUT1 "Resume : $resume \n";
  420.                         print OUT2 "<item><title>$titre</title><abstract>$resume</abstract></item>\n";
  421.                         print OUT3 "<item>\n<title>\n$titreetiquete</title>\n<abstract>\n$resumeetiquete</abstract>\n</item>\n";
  422.  
  423.                         $tabcontenu{$test}++;
  424.                     }
  425.                 }
  426.                 print OUT2 "</items>\n";
  427.                 print OUT3 "</items>\n";
  428.                 close(OUT1);
  429.                 close(OUT2);
  430.                 close(OUT3)
  431.             }
  432.         }
  433.         }
  434.     }
  435. }
  436.  
  437.  
  438. #################################################################
  439. #---------- Xpath ---------------------------------------------
  440. #################################################################
  441. sub Xpath {
  442. my $rep = $_[0] || '';
  443. $rep=~ s/[\/]$//;
  444.  
  445. my $dossier = $rep;
  446. $dossier =~ s/.+\\(.+)$/$1/;
  447.  
  448. mkdir("resultat_xpath_$dossier");
  449. mkdir("./resultat_xpath_$dossier/resultat");
  450. mkdir("./resultat_xpath_$dossier/cordial");
  451. mkdir("./resultat_xpath_$dossier/cordial/fichiers");
  452.  
  453. my %tabcontenu = ();
  454.  
  455. #-----------------------------------------------------------------
  456. &parcoursarborescencefichiers_Xpath($rep,$dossier); #recurse!
  457. #------------------------------------------------------------------
  458.  
  459. $cheminrep ="./resultat_xpath_$dossier/resultat";
  460. opendir(DIRS,$cheminrep) or die "can't open $cheminrep: $!\n";
  461. my @files = readdir(DIRS);
  462. closedir(DIRS);
  463. foreach my $file(@files){
  464.     next if $file =~ /^\.\.?$/;
  465.             if($file =~/\.xml$/){
  466.                 open(OUT,">>:encoding(utf-8)","./resultat_xpath_$dossier/resultat/$file");
  467.                 print OUT "</file>\n";
  468.                 close(OUT);
  469.             }
  470.         if($file=~/\.txt$/){
  471.     open(IN,"<:encoding(utf8)","./resultat_xpath_$dossier/resultat/$file");
  472.     open (OUT4, ">:encoding(iso-8859-1)","./resultat_xpath_$dossier/cordial/iso_$file");
  473.     while(<IN>){
  474.          print OUT4 $_;
  475.     }
  476.         close (OUT4);
  477.         close (IN);
  478.     }
  479. }
  480.  
  481. my $methode = "xpath";
  482. $cordial="./resultat_xpath_$dossier/cordial";
  483. opendir(COR, $cordial) or die "can't open $path: $!\n";
  484. my @fics = readdir(COR);
  485. closedir(COR);
  486. foreach my $fich(@fics){
  487.     next if $fich =~ /^\.\.?$/;
  488.     &decoupe($fich,$dossier,$methode); # Procédure qui permet un fichier en plusieurs fichiers de 2Mo
  489. }
  490.  
  491. system("del texteaetiqueter.txt");
  492. system("del treetagger.txt");
  493. system("del treetagger.txt.xml");
  494.  
  495. $response = $mw->messageBox(-icon => 'info', -message => 'Extraction terminée !', -title => 'Extraction finie', -type => 'OK');
  496.  
  497. }
  498.  
  499. sub parcoursarborescencefichiers_Xpath {
  500.     my $path = shift(@_);
  501.     my $dossier = shift(@_);
  502.    
  503.     opendir(DIR, $path) or die "can't open $path: $!\n";
  504.     my @files = readdir(DIR);
  505.     closedir(DIR);
  506.     foreach my $file (@files) {
  507.         next if $file =~ /^\.\.?$/;
  508.         $file = $path."/".$file;
  509.         if (-d $file) {
  510.             &parcoursarborescencefichiers_Xpath($file); #recurse!
  511.         }
  512.         if (-f $file) {
  513.             if(($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/) && ($file !~/0,2-3404,1-0,0\.xml$/)){
  514.             my $encodage = "";
  515.             my $encodagesortie="utf-8";
  516.             my $texte="";
  517.            
  518.             if(-z $file){
  519.                 print "$file est vide pas de traitement\n";
  520.             }else{
  521.                 open(FIC,$file);
  522.                 while (my $ligne=<FIC>) {
  523.                     $ligne =~ s/\n//g;
  524.                     if($ligne =~/(iso-8859-1|utf-8)/ig){
  525.                         $encodage = $1;
  526.                     }
  527.                 }
  528.                 close(FIC);
  529.                 #-----------------------------------------------------------
  530.                 open(FILE,"<:encoding($encodage)", $file);
  531.                 my $texte="";
  532.                 while (my $ligne=<FILE>) {
  533.                     $ligne =~ s/\n//g;
  534.                     $ligne =~ s/\r//g;
  535.                      $texte .= $ligne;
  536.                    
  537.                 }
  538.                
  539.                     if($texte =~/<channel><title>([^<]+)<\/title>/ig){
  540.                         $rubrique = $1;
  541.                         $rubrique=~s/é/e/gi;
  542.                         $rubrique=~s/è/e/gi;
  543.                         $rubrique=~s/ê/e/gi;
  544.                         $rubrique=~s/à/a/gi;
  545.                         $rubrique=~ s/Le ?Monde.fr ?://;
  546.                         $rubrique=~s/ ?- ?Le ?Monde\.fr//;
  547.                         $rubrique=~s/es$/e/i;
  548.                         $rubrique=~ s/ //g;
  549.                         $rubrique=uc($rubrique);
  550.                     }
  551.                
  552.                 close(FILE);
  553.                 if($rubrique eq ""){
  554.                     $rubrique = "NONCLASSE";
  555.                 }
  556.                
  557.                 #-----------------------------------------------------------
  558.                 open(OUT1,">>:encoding(utf-8)","./resultat_xpath_$dossier/resultat/$rubrique.txt");
  559.                 open(OUT2,">>:encoding(utf-8)","./resultat_xpath_$dossier/resultat/$rubrique.xml");
  560.                 open(OUT3,">>:encoding(utf-8)","./resultat_xpath_$dossier/resultat/$rubrique-treetagger.xml");
  561.                 if(-z OUT2){
  562.                     print OUT2 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
  563.                     print OUT2 "<file>\n";
  564.                     print OUT2 "<name>$ARGV[0]</name>\n";
  565.                 }
  566.                     if(-z OUT3){   
  567.                     print OUT3 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
  568.                     print OUT3 "<file>\n";
  569.                     print OUT3 "<name>$ARGV[0]</name>\n";
  570.                 }
  571.                 #-----------------------------------------------------------
  572.                 print OUT2 "<items>\n";
  573.                 print OUT3 "<items>\n";
  574.                 my $input_file= $file;
  575.                 my $xp = XML::XPath->new( filename => $input_file ) or die "big trouble";
  576.                 my $date = "";
  577.                 my $date_path="//channel";
  578.                 foreach my $date_noeud ( $xp->find($date_path)->get_nodelist ) {
  579.                     $date=$date_noeud->find('pubDate')->string_value;
  580.                 }
  581.                 print OUT2 "<date>$date</date>\n";
  582.                 print OUT3 "<date>\n$date</date>\n";
  583.                 my $search_path.="//item";
  584.                 foreach my $noeud ( $xp->find($search_path)->get_nodelist ) {
  585.                     my $titre=$noeud->find('title')->string_value;
  586.                     my $resume=$noeud->find('description')->string_value;
  587.                     $titre=&nettoietexte($titre);
  588.                     $resume=&nettoietexte($resume);
  589.                     my $test=$titre;
  590.                     if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
  591.                     if(!exists $tabcontenu{$test}){
  592.                             my ($titreetiquete, $resumeetiquete) = &etiquetage ($titre, $resume);
  593.                             print OUT1 "Titre : $titre \n";
  594.                             print OUT1 "Resume : $resume \n";
  595.                             print OUT2 "<item><title>$titre</title><abstract>$resume</abstract></item>\n";
  596.                             print OUT3 "<item>\n<title>\n$titreetiquete</title>\n<abstract>\n$resumeetiquete</abstract>\n</item>\n";
  597.                             $tabcontenu{$test}++;
  598.                     }
  599.                 }
  600.                 print OUT2 "</items>\n";
  601.                 print OUT3 "</items>\n";
  602.                 close(OUT1);
  603.                 close(OUT2);
  604.                 close(OUT3);
  605.             }
  606.         }
  607.         }
  608.     }
  609. }
  610.  
  611.  
  612. #################################################################
  613. #---------- Tree-Tagger -----------------------------------------
  614. #################################################################
  615. sub etiquetage($titre, $resume) {
  616.     my ($titre, $resume) = @_;
  617.     my $tmptag="texteaetiqueter.txt";
  618.     open (TMPFILE,">:encoding(utf-8)", $tmptag);
  619.     print TMPFILE $titre,"\n";
  620.     close(TMPFILE);
  621.     my $tokenisefr = "\"./tree-tagger/tokenise-fr\"";
  622.     my $treetaggerexe = "\"./tree-tagger/tree-tagger\"";
  623.     my $treetagger2xml = "\"./tree-tagger/treetagger2xml\"";
  624.     system("$tokenisefr $tmptag | $treetaggerexe ./tree-tagger/french-utf8.par -lemma -token -no-unknown -sgml > treetagger.txt");
  625.     system("$treetagger2xml treetagger.txt utf-8");
  626.     # lecture du resultat tagge en xml :
  627.     open(OUT,"<:encoding(utf-8)","treetagger.txt.xml");
  628.     my $firstline=<OUT>;
  629.     my $titreetiquete="";
  630.     while (my $l=<OUT>) {
  631.        $titreetiquete.=$l;
  632.     }
  633.     close(OUT);
  634.     #----- le resume
  635.     open (TMPFILE,">:encoding(utf-8)", $tmptag);
  636.     print TMPFILE $resume,"\n";
  637.     close(TMPFILE);
  638.     system("$tokenisefr $tmptag | $treetaggerexe ./tree-tagger/french-utf8.par -lemma -token -no-unknown -sgml > treetagger.txt");
  639.     system("$treetagger2xml treetagger.txt utf-8");
  640.     # lecture du resultat tagge en xml :
  641.     open(OUT,"treetagger.txt.xml");
  642.     my $firstline=<OUT>;
  643.     my $resumeetiquete="";
  644.     while (my $l=<OUT>) {
  645.        $resumeetiquete.=$l;
  646.     }
  647.     close(OUT);
  648.     # on renvoie les resultats :
  649.     return ($titreetiquete,$resumeetiquete);
  650. }
  651.  
  652. #################################################################
  653. #---------- NettoieTexte ---------------------------------------
  654. #################################################################
  655. sub nettoietexte {
  656.     my $texte=shift;
  657.     $texte =~ s/&lt;/</g;
  658.     $texte =~ s/&gt;/>/g;
  659.     $texte =~ s/<a href[^>]+>//g;
  660.     $texte =~ s/<img[^>]+>//g;
  661.     $texte =~ s/<\/a>//g;
  662.     $texte =~ s/&#38;#39;/'/g;
  663.     $texte =~ s/&#38;#34;/"/g;
  664.     $texte =~ s/&#233;/é/g;
  665.     $texte =~ s/&#234;/ê/g;
  666.     $texte =~ s/<[^>]+>//g;
  667.     $texte =~ s/&nbsp;/ /g;
  668.     $texte=~s/&#39;/'/g;
  669.     $texte=~s/&#34;/"/g;
  670.     $texte=~s/&amp;#39;/'/g;
  671.     $texte=~s/&amp;#34;/"/g;
  672.     return $texte;
  673. }
  674.  
  675. #################################################################
  676. #---------- Decoupe pour Cordial --------------------------------
  677. #################################################################
  678. sub decoupe{
  679. my $fichier = shift(@_);
  680. my $dossier = shift(@_);
  681. my $methode = shift(@_);
  682. my $chemin = "./resultat_$methode";
  683. $chemin .= "_$dossier/cordial";
  684. open(F,"$chemin/$fichier");
  685. my $num = 1;
  686. my $taille = 0;
  687. while($ligne = <F>) {
  688.     if($taille < 2000){ # On veut des fichiers de 2Mo = 2000000 octets
  689.     open (OUT,">>$chemin/fichiers/$fichier".$num.".txt");
  690.     print OUT $ligne;
  691.     $taille = -s OUT;
  692.     close(OUT);
  693.     }else{
  694.      $num++;
  695.      $taille = 0;
  696.     }
  697. }
  698. close (F);
  699. }
  700.  
  701.  
  702.