1 #!usr/bin/perl
2
3
4
5
6 use strict;
7 use warnings;
8 use 5.014;
9 use Switch;
10 use Data::Dumper;
11 use XML::RSS;
12
13
14
15
16
17
18
19 die "Pour $0 syntaxe correcte : perl $0 nom_repertoire " unless @ARGV == 1;
20
21 my $racine = $ARGV[0];
22 my $saveDir = "$ARGV[0]";
23 print "répertoire de départ : $racine\n";
24
25 system("rm -rf RESULTAT_EXTRACTION");
26 mkdir ("RESULTAT_EXTRACTION");
27 my $saveName;
28 my %dejaOuvertHtml1=();
29 my %dejaOuvertXml1=();
30 my $encodage=0;
31 my %testExistenceTitreTXT=();
32 my %testExistenceTitreHTML=();
33 my %testExistenceTitreXML=();
34 my %testExistenceTitreXMLRSS=();
35
36
37 lectureDossier1($racine);
38 lectureDossier2("RESULTAT_EXTRACTION");
39
40
41
42
43
44
45
46 sub lectureDossier1
47 {
48 my ($dossierEnCours) = @_;
49
50 opendir (my $D, $dossierEnCours) or die "Erreur d'ouverture de dossier type : $!";
51
52 foreach my $x (readdir ($D))
53 {
54 $saveName=$x;
55 $x=$dossierEnCours."/".$x;
56
57
58
59 next if $x=~ /^\.|\.\.?$/;
60 if (-d $x)
61 {
62 lectureDossier1($x);
63
64 }
65 elsif (-f $x)
66 {
67
68 traitementXML($x);
69 }
70 }
71 closedir $D;
72 };
73
74 sub lectureDossier2
75 {
76 my ($dossierEnCours) = @_;
77 my $compteur=0;
78 opendir (my $D, $dossierEnCours) or die "Erreur d'ouverture de dossier type : $!";
79 foreach my $x (readdir ($D))
80 {
81 $saveName=$x;
82 $x=$dossierEnCours."/".$x;
83 next if $x=~ /^\.|\.\.?$/;
84 if (-d $x)
85 {
86 lectureDossier2($x);
87 }
88 elsif (-f $x)
89 {
90 if ($x=~ /.*\.html$/)
91 {
92 open (my $finalHtml, ">>", "$x");
93 footerHtml($finalHtml);
94 }
95 if ($x=~ /.*\.xml$/)
96 {
97 open (my $finalXml, ">>", "$x");
98 footerXML($finalXml);
99
100 }
101 if ($x=~ /.*\.txt$/)
102 {
103
104
105
106 }
107
108
109 }
110 }
111 closedir $D;
112 };
113
114
115
116
117
118 sub traitementXML
119 {
120 my ($fichier)=@_;
121 if ($fichier=~ /.*\.xml/)
122 {
123
124 evaluation($fichier);
125 }
126
127 }
128
129
130
131 sub evaluation
132 {
133
134 my ($fichier)=@_;
135 my $ligne;
136 my $texte;
137 my $rubrique;
138
139 open (my $IN3, "<", "$fichier");
140 while ($ligne=<$IN3>)
141 {
142 $ligne=~ s/\n//g;
143 $texte.=$ligne;
144 }
145
146
147 if ($texte=~/<channel>.*?<title>(.*?)<.title>/g)
148 {
149 $rubrique=$1;
150 }
151 if (defined($rubrique))
152 {
153
154 say $rubrique;
155 $rubrique= nettoyageRubrique($rubrique);
156
157 extractionTXT($fichier,$rubrique);
158 extractionHTML($fichier,$rubrique);
159 extractionXML($fichier,$rubrique);
160 extractionXMLRSS($fichier,$rubrique);
161 }
162 close $IN3;
163 }
164
165
166
167 sub nettoyageRubrique
168 {
169 my ($element) = @_;
170
171 my %hash=(
172 "à"=>"a",
173 "â"=>"a",
174 "é"=>"e",
175 "è"=>"e",
176 "ê"=>"e",
177 "ë"=>"e",
178 "\x{E9}"=>"e",
179 "î"=>"i",
180 "ï"=>"i",
181 "ï"=>"i",
182 "î"=>"i",
183 "ô"=>"o",
184 "û"=>"u",
185 "ü"=>"u",
186 ","=>" ",
187 " "=>"_",
188 "Le Monde.fr"=>"",
189 "LeMonde.fr"=>""
190 );
191 foreach my $key (keys %hash)
192 {
193 $element=~ s/$key/$hash{$key}/g;
194 }
195 $element=uc($element);
196 foreach my $change ($element)
197 {
198 $change=~ s/_-_//g;
199 $change=~ s/_:_/_/g;
200 $change=~ s/_\.//g;
201 }
202 return $element;
203 }
204
205
206
207 sub extractionTXT
208 {
209 my ($fichier,$rubrique)=@_;
210 $encodage=detectionEncodage($fichier);
211 mkdir ("./RESULTAT_EXTRACTION/$encodage");
212 mkdir ("./RESULTAT_EXTRACTION/$encodage/$rubrique");
213 open (my $IN4, "<:encoding($encodage)", "$fichier") or die "Erreur 4IN : $!";
214 $saveName=~ s/xml/txt/g;
215 my $chemin="./RESULTAT_EXTRACTION/$encodage/$rubrique/$saveName";
216 open (my $OUT4, ">>:encoding($encodage)", "$chemin") or die "Erreur 4OUT : $!";
217 my $ligne;
218 my $texte;
219 my $titre;
220 my $description;
221
222
223 while ($ligne=<$IN4>)
224 {
225 $ligne=~ s/\n//g;
226 $texte.=$ligne;
227 }
228 $texte=nettoyageFichier($texte);
229 while ($texte=~ m/<item>.*?<title>(.*?)<.title>.*?<description>(.*?)<.description>/g)
230 {
231 $titre=$1;
232 $description=$2;
233
234 unless (exists ($testExistenceTitreTXT{$titre}))
235 {
236 $testExistenceTitreTXT{$titre}++;
237 say $OUT4 "*";
238 say $OUT4 "titre : $titre";
239 say $OUT4 "description : $description";
240 }
241 }
242 close $IN4;
243 close $OUT4;
244 }
245
246
247
248 sub extractionHTML
249 {
250 my ($fichier,$rubrique)=@_;
251 $encodage=detectionEncodage($fichier);
252 mkdir ("./RESULTAT_EXTRACTION/$encodage");
253 mkdir ("./RESULTAT_EXTRACTION/$encodage/$rubrique");
254 open (my $IN4, "<:encoding($encodage)", "$fichier") or die "Erreur 4IN : $!";
255 $saveName=~ s/txt/html/g;
256 my $chemin="./RESULTAT_EXTRACTION/$encodage/$rubrique/$saveName";
257 open (my $OUT4, ">>:encoding($encodage)", "$chemin") or die "Erreur 4OUT : $!";
258 my $ligne;
259 my $texte;
260 my $titre;
261 my $description;
262
263
264 while ($ligne=<$IN4>)
265 {
266 $ligne=~ s/\n//g;
267 $texte.=$ligne;
268 }
269
270 $texte=nettoyageFichier($texte);
271 if (!exists($dejaOuvertHtml1{"$encodage/$rubrique/$saveName"}))
272 {
273 headerHtml($OUT4);
274 $dejaOuvertHtml1{"$encodage/$rubrique/$saveName"}++;
275 }
276 while ($texte=~/<item>.*?<title>(.*?)<.title>.*?<description>(.*?)<.description>/g)
277 {
278 $titre=$1;
279 $description=$2;
280 unless (exists($testExistenceTitreHTML{$titre}))
281 {
282 $testExistenceTitreHTML{$titre}++;
283 say $OUT4 "<tr><td colspan=\"2\" align=\"center\" bgcolor=\"beige\">$fichier/$rubrique</td></tr>";
284 say $OUT4 "<tr><td>titre : $titre</td>";
285 say $OUT4 "<td>description : $description</td></tr>";
286 }
287 }
288 close $IN4;
289 close $OUT4;
290 }
291
292 sub extractionXML
293 {
294 my ($fichier,$rubrique)=@_;
295 $encodage=detectionEncodage($fichier);
296 mkdir ("./RESULTAT_EXTRACTION/$encodage");
297 mkdir ("./RESULTAT_EXTRACTION/$encodage/$rubrique");
298 open (my $IN4, "<:encoding($encodage)", "$fichier") or die "Erreur 4IN : $!";
299 my $saveNameXML = $saveName;
300 $saveNameXML=~ s/html/xml/g;
301 my $chemin="./RESULTAT_EXTRACTION/$encodage/$rubrique/$saveNameXML";
302 open (my $OUT4, ">>:encoding($encodage)", "$chemin") or die "Erreur 4OUT : $!";
303 my $ligne;
304 my $texte;
305 my $titre;
306 my $description;
307
308
309 while ($ligne=<$IN4>)
310 {
311 $ligne=~ s/\n//g;
312 $texte.=$ligne;
313 }
314 $texte=nettoyageFichier($texte);
315
316 if (!exists($dejaOuvertXml1{"$encodage/$rubrique/$saveNameXML"}))
317 {
318 headerXML($OUT4);
319 $dejaOuvertXml1{"$encodage/$rubrique/$saveNameXML"}++;
320 }
321
322 while ($texte=~/<item>.*?(<title>.*?<.title>).*?(<description>.*?<.description>)/g)
323 {
324 $titre=$1;
325 $description=$2;
326 unless(exists($testExistenceTitreXML{$titre}))
327 {
328 $testExistenceTitreXML{$titre}++;
329 say $OUT4 "<dossier>$fichier/$rubrique</dossier>";
330 say $OUT4 "$titre";
331 say $OUT4 "$description";
332 }
333 }
334
335 close $IN4;
336 close $OUT4;
337
338 }
339
340 sub extractionXMLRSS
341 {
342 my ($fichier,$rubrique)=@_;
343 my $rss = new XML::RSS;
344 $encodage=detectionEncodage($fichier);
345 mkdir ("./RESULTAT_EXTRACTION/$encodage");
346 mkdir ("./RESULTAT_EXTRACTION/$encodage/$rubrique");
347 my $saveNameXMLRSS = $saveName;
348 $saveNameXMLRSS=~ s/html/txt/g;
349 my $chemin="./RESULTAT_EXTRACTION/$encodage/$rubrique/xmlrss_$saveNameXMLRSS";
350 open (my $OUT5, ">>:encoding($encodage)", "$chemin") or die "Erreur 5OUT : $!";
351 $rss->parsefile($fichier);
352 my $texte;
353
354 foreach my $objet (@{$rss->{items}})
355 {
356 my $titre = $objet->{'title'};
357 my $description = $objet->{'description'};
358
359 unless (exists ($testExistenceTitreXMLRSS{$titre}))
360 {
361 $texte=nettoyageFichier($titre);
362 say $OUT5 "titre : $texte";
363 $texte=nettoyageFichier($description);
364 say $OUT5 "description : $texte";
365 }
366 }
367 close $OUT5;
368
369 }
370
371
372
373
374
375 sub nettoyageFichier
376 {
377 my ($texte)= @_;
378 my %hash4=(
379 "'"=>"'",
380 "‘"=>"'",
381 "’"=>"'",
382 "&"=>"&",
383 "&"=>"&",
384 """=>"\"",
385 """=>"\"",
386 "'"=>"\'",
387 "'"=>"\'",
388 "<"=>"<",
389 ">"=>">",
390 " "=>" ",
391 " "=>" ",
392 "£"=>"£",
393 "£"=>"£",
394 "©"=>"©",
395 "«"=>"«",
396 "«"=>"«",
397 "»"=>"»",
398 "»"=>"",
399 "É"=>"É",
400 "É"=>"É",
401 "í"=>"î",
402 "î"=>"î",
403 "ï"=>"ï",
404 "ï"=>"ï",
405 "à"=>"à",
406 "à"=>"à",
407 "â"=>"â",
408 "â"=>"â",
409 "ç"=>"ç",
410 "ç"=>"ç",
411 "è"=>"è",
412 "è"=>"è",
413 "é"=>"é",
414 "é"=>"é",
415 "ê"=>"ê",
416 "ê"=>"ê",
417 "ô"=>"ô",
418 "ô"=>"ô",
419 "û"=>"û",
420 "û"=>"û",
421 "ü"=>"ü",
422 "ü"=>"ü",
423 "ü"=>"ü",
424 ">"=>">",
425 "<"=>"<"
426 );
427
428 foreach my $key (keys %hash4)
429 {
430 $texte=~ s/$key/$hash4{$key}/g;
431 }
432 $texte=enleveBalise($texte);
433 return $texte;
434 }
435
436 sub headerHtml
437 {
438
439 my ($EXIT) =@_;
440 print $EXIT
441 "<html>
442 <head>
443 <meta charset=$encodage
444 </head>
445 <title></title>
446 <body>
447 <table border=\"5\">
448 ";
449
450 }
451
452 sub footerHtml
453 {
454 my ($EXIT) =@_;
455 print $EXIT
456 "</table>
457 </body>
458 </html>
459 ";
460 }
461
462 sub headerXML
463 {
464 my ($OUT)=@_;
465 print $OUT "<?xml version=\"1.0\" encoding=\"$encodage\"?>";
466 print $OUT "<racine>";
467 }
468
469 sub footerXML
470 {
471 my ($OUT)=@_;
472 print $OUT "</racine>";
473 }
474
475
476 sub detectionEncodage
477 {
478 my ($scalaire) = @_;
479 my $encodageFonction;
480 open (my $encodeIN, "<","$scalaire");
481 while (my $ligneEncode = <$encodeIN>)
482 {
483 if ($ligneEncode=~ m/<.xml.*?encoding=(.*?).>/)
484 {
485 $encodageFonction = $1;
486 }
487 }
488 close $encodeIN;
489 $encodageFonction=~ s/'//g;
490 $encodageFonction=~ s/"//g;
491 return $encodageFonction;
492 }
493
494 sub enleveBalise
495 {
496 my ($ligne)=@_;
497 $ligne=~ s/<img.*?>//g;
498 $ligne=~ s/<br.*?\/>//g;
499 $ligne=~ s/<a.*?\/a>//g;
500 $ligne=~ s/\&/and/g;
501 return $ligne;
502 }
503
504