Ici vous allez pouvoir télécharger le script : cliquez ici
Et bien sur, le script :
La plupart des commentaires le concernant sont disponibles sur le blog ou dans l'onglet méthode
#!/bin/bash # LECTURE D'INFORMATIONS ################################################################################################ read dossierUrl; read tablo; read motif; read motifMinigrep; # SUPPRESSION DES ANCIENS FICHIERS ################################################################################################ #on supprime les anciens dossiers et leur contenu pour éviter les doublons rm -r ../DUMP-TEXT/*; rm -r ../PAGES-ASPIREES/*; rm -r ../CONTEXTES/*; # PAGE HTML ################################################################################################ echo "<!DOCTYPE HTML \"-//W3C//DTD HTML 4.0//EN\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" ><html><head><title>tableau de liens</title></head><body>" > $tablo; ################################################################################################ # BOUCLE 1 : LECTURE DE FICHIERS ET VARIABLES LIÉES ################################################################################################ #variable j pour compter les dossiers à raison d'un pour chaque langue j=1; for fichier in `ls $dossierUrl` do # type de Tableau if [ "$j" = "1" ] then nomTableau="Anglais" else if [ "$j" = "2" ] then nomTableau="Espagnol" else if [ "$j" = "3" ] then nomTableau="Français" else if [ "$j" = "4" ] then nomTableau="Indonésien" else if [ "$j" = "5" ] then nomTableau="Japonais" fi fi fi fi fi # Variable i pour compter les URLs, c pour compter les pages aspirées, et compteurGlobalDump pour compter les dumps i=1; c=0; compteurGlobalDump=0; nombreOccurrence=0; # DOSSIERS DANS LES BOUCLES ################################################################################################## # on crée les différents dossiers pour contenir tout les fichiers résultats mkdir -p ../DUMP-TEXT/$j; mkdir -p ../PAGES-ASPIREES/$j; # on crée des dossiers supplémentaires pour stocker les différents types de codage mkdir -p ../DUMP-TEXT/$j"PageRecode"; mkdir -p ../CONTEXTES/$j"ContexteTexte"; mkdir -p ../CONTEXTES/$j"ContexteGlobal"; mkdir -p ../DUMP-TEXT/$j"DumpGlobal"; # et des fichiers dictionnaire pour les indexs mkdir -p ../DUMP-TEXT/DictionnaireDump$j; mkdir -p ../CONTEXTES/DictionnaireContextes$j; mkdir -p ../PAGES-ASPIREES/minigrep$j; # TABLEAU PARTIE HAUTE ################################################################################################## echo "<table border=\"5\"><tr><td colspan="10" align="center" bgcolor="DarkGray">Tableau récapitulatif $j langue $nomTableau </td></tr><tr><td align="center" bgcolor="DarkGray">numéro</td><td align="center" bgcolor="DarkGray">urls</td><td align="center" bgcolor="DarkGray">lien vers page html stockée</td><td align="center" bgcolor="DarkGray">page dumpée non utf-8 (si existante)</td><td align="center" bgcolor="DarkGray">page dumpée utf8</td><td align="center" bgcolor="DarkGray">index page dumpée</td><td align="center" bgcolor="DarkGray">contexte (.txt)</td><td align="center" bgcolor="DarkGray">nombre d'occurences</td><td align="center" bgcolor="DarkGray">index contexte</td><td align="center" bgcolor="DarkGray">Contexte Minigrep (.html)</td></tr>" >> $tablo; # BOUCLE 2 : TRAITEMENT FICHIERS PAR FICHIERS ################################################################################################ # pour chaque ligne (nommée ici par la variable nom) dans le fichier d'urls désigné par la variable chemin on fera : for nom in `cat $dossierUrl/$fichier` do # on aspire les pages avec wget, aspiration limitée à 3 tentatives (option t) : wget -t 3 -O ../PAGES-ASPIREES/$j/$i.html $nom; if [ $? != 0 ] then a="aspiration échouée"; b="red"; else a="aspiration executée"; b="greenyellow"; c=`expr $c + 1`; fi # phase test encodage # on crée pour l'occasion une variable qui va servir à tester l'encodage encodage=$(file -i ../PAGES-ASPIREES/$j/$i.html | cut -d= -f2); if [ "$encodage" = "utf-8" ] then # IF A) LANGUE JAPONAISE ET AUTRES ################################################################################################ # il faut maintenant traiter le problème spécifique à la découpe des phrases japonaises sans espace if [ "$j" = "5" ] then # LANGUE JAPONAISE ################################################################################################ # on dump les pages avec lynx : lynx -dump -nolist -display_charset=$encodage $nom > ../DUMP-TEXT/$j/$i.txt; # on test le retour de lynx if [ $? != 0 ] then resultatLynx="dump impossible dictionnaires et contextes vides"; dumpColor="brown1"; else resultatLynx="dump effectué"; dumpColor="Green"; compteurGlobalDump=`expr $compteurGlobalDump + 1` perl ./minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ../DUMP-TEXT/$j/$i.txt $motifMinigrep; cp ./resultat-extraction.html ../PAGES-ASPIREES/minigrep$j/minigrep$i.html; fi # on creer l'index des dump pour le premier cas pour cela on utilise deux expressions régulières et un fichier dictionnaire (cas japonais) # on utilise aussi la commande mecab pour régler la question du découpage de la phrase en mots mecab ../DUMP-TEXT/$j/$i.txt |sort|uniq -iu|cut -f1|sed -re 's/[0-9]|\t//g'|sed -re '/>|_|\/|、|,|0|1|2|3|4|5|6|7|8|9|★|☆|■|◆|▲|●|-|:|:|\.|。|・|〜|!|\\|||※|−|&|〒||“|”|\(|\)|[|]|【|】|(|)|>|「|『|」|』|//d'|uniq -ci|sort -nr > ../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt; # extraction du motif en japonais grep -f $motif -C1 -i ../DUMP-TEXT/$j/$i.txt > ../CONTEXTES/$j"ContexteTexte"/$i.txt; nombreOccurrence=$(grep -io -f $motif ../DUMP-TEXT/$j/$i.txt | wc -l); # traitement de l'index du contexte en japonais mecab ../CONTEXTES/$j"ContexteTexte"/$i.txt|sort|uniq -iu|cut -f1|sed -re 's/[0-9]|\t//g'|sed -re '/>|_|\/|、|,|0|1|2|3|4|5|6|7|8|9|★|☆|■|◆|▲|●|-|:|:|\.|。|・|〜|!|\\|||※|−|&|〒||“|”|\(|\)|[|]|【|】|(|)|>|「|『|」|』|//d'|uniq -ci|sort -nr > ../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt; # concaténation des dumps echo "<file=$j>" >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; cat ../DUMP-TEXT/$j/$i.txt >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; # concaténation des contextes echo "<file=$j>" >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; cat ../CONTEXTES/$j"ContexteTexte"/$i.txt >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; # on cherche maintenant à stocker les résultats dans le tableau echo "<tr><td align="center">$i</td><td align="center"><a href=\"$nom\">$nom</a></td><td align="center" bgcolor="$b"><a href=\"../PAGES-ASPIREES/$j/$i.html\">PAGE ASPIREE</a><br>N° $i<br>$a</td><td align="center">-</td><td align="center"><a href=\"../DUMP-TEXT/$j/$i.txt \">PAGE DUMP</a><br>N° $i<br>$resultatLynx<br>encodage $encodage</td><td align="center"><a href=\"../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt\">DICTIONNAIRE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../CONTEXTES/$j"ContexteTexte"/$i.txt\">CONTEXTE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor">$nombreOccurrence</td><td align="center"><a href=\"../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt\">DICTIONNAIRE CONTEXTE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../PAGES-ASPIREES/minigrep$j/minigrep$i.html\">CONTEXTE MINIGREP</a><br>n°$i</td></tr>" >> $tablo; # la balise tr définie une ligne, td une cellule, $i est égale au nombre de l'url, a href permet d'insérer un lien, le >> sert à écrire à la suite du tableau # reste à augmenter le compteur de 1 # on passe aux autres cas de langue, avec espace else # AUTRES LANGUES ################################################################################################ # on dump les pages avec lynx : lynx -dump -nolist -display_charset=$encodage $nom > ../DUMP-TEXT/$j/$i.txt; # on test le retour de lynx if [ $? != 0 ] then resultatLynx="dump impossible dictionnaires et contextes vides"; dumpColor="brown1"; else resultatLynx="dump effectué"; dumpColor="Green"; compteurGlobalDump=`expr $compteurGlobalDump + 1` perl ./minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ../DUMP-TEXT/$j/$i.txt $motifMinigrep; cp ./resultat-extraction.html ../PAGES-ASPIREES/minigrep$j/minigrep$i.html; fi # on creer l'index des dump pour le premier cas pour cela on utilise deux expressions régulières et un fichier dictionnaire sed -re 's/\(|\.|!|,|\)|\[|\]|«|»|;|:|\*|\+|\-|\_|\%|\&|\t|\||\/|#|©|$|\–|<|>|www|$/ /g' ../DUMP-TEXT/$j/$i.txt|sed -re 's/[0-9]*//g'|sed -re 's/ /\n/g'|sort|uniq -ci|sort -nr| sed '1d' > ../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt; # extraction du motif grep -f $motif -C1 -i ../DUMP-TEXT/$j/$i.txt > ../CONTEXTES/$j"ContexteTexte"/$i.txt; nombreOccurrence=$(grep -io -f $motif ../DUMP-TEXT/$j/$i.txt | wc -l); # traitement de l'index du contexte sed -re 's/\(|\.|!|,|\)|\[|\]|«|»|;|:|\*|\+|\-|\_|\%|\&|\t|\||\/|#|©|$|\–|<|>|www|$/ /g' ../CONTEXTES/$j"ContexteTexte"/$i.txt|sed -re 's/[0-9]*//g'|sed -re 's/ /\n/g'|sort|uniq -ci|sort -nr| sed '1d' > ../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt; # concaténation des dumps echo "<file=$j>" >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; cat ../DUMP-TEXT/$j/$i.txt >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; # concaténation des contextes echo "<file=$j>" >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; cat ../CONTEXTES/$j"ContexteTexte"/$i.txt >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; # on cherche maintenant à stocker les résultats dans le tableau echo "<tr><td align="center">$i</td><td align="center"><a href=\"$nom\">$nom</a></td><td align="center" bgcolor="$b"><a href=\"../PAGES-ASPIREES/$j/$i.html\">PAGE ASPIREE</a><br>N° $i<br>$a</td><td align="center">-</td><td align="center"><a href=\"../DUMP-TEXT/$j/$i.txt \">PAGE DUMP</a><br>N° $i<br>$resultatLynx<br>encodage $encodage</td><td align="center"><a href=\"../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt\">DICTIONNAIRE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../CONTEXTES/$j"ContexteTexte"/$i.txt\">CONTEXTE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor">$nombreOccurrence</td><td align="center"><a href=\"../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt\">DICTIONNAIRE CONTEXTE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../PAGES-ASPIREES/minigrep$j/minigrep$i.html\">CONTEXTE MINIGREP</a><br>n°$i</td></tr>" >> $tablo; # la balise tr définie une ligne, td une cellule, $i est égale au nombre de l'url, a href permet d'insérer un lien, le >> sert à écrire à la suite du tableau # reste à augmenter le compteur de 1 fi # FIN IF A) LANGUE JAPONAISE ET AUTRES ################################################################################################ else # il faut maintenant traiter le problème spécifique à la découpe des phrases japonaises sans espace dans le cas d'un recode # IF B) LANGUE JAPONAISE ET AUTRES (cas avec recode) ################################################################################################ if [ "$j" = "5" ] then # LANGUE JAPONAISE ################################################################################################ # on dump les pages avec lynx : lynx -dump -nolist -display_charset=$encodage $nom > ../DUMP-TEXT/$j/$i.txt; # on test le retour de lynx lynx -dump -nolist $nom > ../DUMP-TEXT/$j"PageRecode"/$i.txt; if [ $? != 0 ] then resultatLynx="dump impossible dictionnaires et contextes vides"; dumpColor="brown1"; else resultatLynx="dump effectué"; dumpColor="Green"; compteurGlobalDump=`expr $compteurGlobalDump + 1` perl ./minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ../DUMP-TEXT/$j"PageRecode"/$i.txt $motifMinigrep; cp ./resultat-extraction.html ../PAGES-ASPIREES/minigrep$j/minigrep$i.html; fi # et on les recode # on passe maintenant les fichiers vers le filtre recode pour avoir la certitude de reconvertir en UTF8, ceci tout en sachant que lynx dump par défaut en utf8 recode -f UTF-8 ../DUMP-TEXT/$j"PageRecode"/$i.txt; # on creer l'index des dump pour le premier cas pour cela on utilise deux expressions régulières et un fichier dictionnaire (cas japonais) # on utilise aussi la commande mecab pour régler la question du découpage de la phrase en mots mecab ../DUMP-TEXT/$j"PageRecode"/$i.txt |sort|uniq -iu|cut -f1|sed -re 's/[0-9]|\t//g'|sed -re '/>|_|\/|、|,|0|1|2|3|4|5|6|7|8|9|★|☆|■|◆|▲|●|-|:|:|\.|。|・|〜|!|\\|||※|−|&|〒||“|”|\(|\)|[|]|【|】|(|)|>|「|『|」|』|//d'|uniq -ci|sort -nr > ../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt; # extraction du motif en japonais grep -f $motif -C1 -i ../DUMP-TEXT/$j"PageRecode"/$i.txt > ../CONTEXTES/$j"ContexteTexte"/$i.txt; nombreOccurrence=$(grep -io -f $motif ../DUMP-TEXT/$j"PageRecode"/$i.txt | wc -l); # traitement de l'index du contexte en japonais mecab ../CONTEXTES/$j"ContexteTexte"/$i.txt|sort|uniq -iu|cut -f1|sed -re 's/[0-9]|\t//g'|sed -re '/>|_|\/|、|,|0|1|2|3|4|5|6|7|8|9|★|☆|■|◆|▲|●|-|:|:|\.|。|・|〜|!|\\|||※|−|&|〒||“|”|\(|\)|[|]|【|】|(|)|>|「|『|」|』|//d'|uniq -ci|sort -nr > ../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt; # concaténation des dumps echo "<file=$j>" >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; cat ../DUMP-TEXT/$j/$i.txt >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; # concaténation des contextes echo "<file=$j>" >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; cat ../CONTEXTES/$j"ContexteTexte"/$i.txt >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; # on cherche maintenant à stocker les résultats dans le tableau echo "<tr><td align="center">$i</td><td align="center"><a href=\"$nom\">$nom</a></td><td align="center" bgcolor="$b"><a href=\"../PAGES-ASPIREES/$j/$i.html\">PAGE ASPIREE</a><br>N° $i<br>$a</td><td align="center" bgcolor="pink"><a href=\"../DUMP-TEXT/$j/$i.txt \">DUMP INITIAL</a><br>N° $i<br>$resultatLynx<br>encodage $encodage</td><td align="center" bgcolor="pink"><a href=\"../DUMP-TEXT/$j"PageRecode"/$i.txt\">PAGE DUMP</a><br>N° $i<br>$resultatLynx<br>recodé utf-8</td><td align="center"><a href=\"../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt\">DICTIONNAIRE <br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../CONTEXTES/$j"ContexteTexte"/$i.txt\">CONTEXTE<br></a>N°$i</td><td align="center" bgcolor="$dumpColor">$nombreOccurrence</td><td align="center"><a href=\"../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt\">DICTIONNAIRE CONTEXTE<br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../PAGES-ASPIREES/minigrep$j/minigrep$i.html\">CONTEXTE MINIGREP</a><br>n°$i</td></tr>" >> $tablo; # la balise tr définie une ligne, td une cellule, $i est égale au nombre de l'url, a href permet d'insérer un lien, le >> sert à écrire à la suite du tableau # reste à augmenter le compteur de 1 # on passe aux autres cas de langue, avec espace else # AUTRES LANGUES ################################################################################################ # on dump les pages avec lynx : lynx -dump -nolist $nom > ../DUMP-TEXT/$j/$i.txt; # on créer un double des pages non utf-8 lynx -dump -nolist $nom > ../DUMP-TEXT/$j"PageRecode"/$i.txt; if [ $? != 0 ] then resultatLynx="dump impossible dictionnaires et contextes vides"; dumpColor="brown1"; else resultatLynx="dump effectué"; dumpColor="Green"; compteurGlobalDump=`expr $compteurGlobalDump + 1` perl ./minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ../DUMP-TEXT/$j"PageRecode"/$i.txt $motifMinigrep; cp ./resultat-extraction.html ../PAGES-ASPIREES/minigrep$j/minigrep$i.html; fi # et on les recode # on passe maintenant les fichiers vers le filtre recode pour avoir la certitude de reconvertir en UTF8, ceci tout en sachant que lynx dump par défaut en utf8 recode -f UTF-8 ../DUMP-TEXT/$j"PageRecode"/$i.txt; sed -re 's/\(|\.|!|,|\)|\[|\]|«|»|;|:|\*|\+|\-|\_|\%|\&|\t|\||\/|#|©|$|\–|<|>|www|$/ /g' ../DUMP-TEXT/$j"PageRecode"/$i.txt|sed -re 's/[0-9]*//g'|sed -re 's/ /\n/g'|sort|uniq -ci|sort -nr| sed '1d' > ../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt; #extraction du motif grep -f $motif -C1 -i ../DUMP-TEXT/$j"PageRecode"/$i.txt > ../CONTEXTES/$j"ContexteTexte"/$i.txt; nombreOccurrence=$(grep -io -f $motif ../DUMP-TEXT/$j"PageRecode"/$i.txt | wc -l); # traitement de l'index du contexte sed -re 's/\(|\.|!|,|\)|\[|\]|«|»|;|:|\*|\+|\-|\_|\%|\&|\t|\||\/|#|©|$|\–|<|>|www|$/ /g' ../CONTEXTES/$j"ContexteTexte"/$i.txt|sed -re 's/[0-9]*//g'|sed -re 's/ /\n/g'|sort|uniq -ci|sort -nr| sed '1d' > ../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt; # concaténation des dumps recodé utf8 echo "<file=$j>" >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; cat ../DUMP-TEXT/$j"PageRecode"/$i.txt >> ../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt; # concaténation des contextes echo "<file=$j>" >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; cat ../CONTEXTES/$j"ContexteTexte"/$i.txt >> ../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt; # on cherche maintenant à stocker les résultats dans le tableau echo "<tr><td align="center">$i</td><td align="center"><a href=\"$nom\">$nom</a></td><td align="center" bgcolor="$b"><a href=\"../PAGES-ASPIREES/$j/$i.html\" >PAGE ASPIREE</a><br>N° $i<br>$a</td><td align="center" bgcolor="pink"><a href=\"../DUMP-TEXT/$j/$i.txt \">DUMP INITIAL</a><br>encodage $encodage</td><td align="center" bgcolor="pink"><a href=\"../DUMP-TEXT/$j"PageRecode"/$i.txt\">PAGE DUMP</a><br>N° $i<br>$resultatLynx<br>recodé utf-8</td><td align="center"><a href=\"../DUMP-TEXT/DictionnaireDump$j/dictionnaire$i.txt\">DICTIONNAIRE<br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../CONTEXTES/$j"ContexteTexte"/$i.txt\">CONTEXTE<br></a>N°$i</td><td align="center" bgcolor="$dumpColor">$nombreOccurrence</td><td align="center"><a href=\"../CONTEXTES/DictionnaireContextes$j/dictionnaire$i.txt\">DICTIONNAIRE CONTEXTE<br></a>N°$i</td><td align="center" bgcolor="$dumpColor"><a href=\"../PAGES-ASPIREES/minigrep$j/minigrep$i.html\">CONTEXTE MINIGREP</a><br>n°$i</td></tr>" >> $tablo; # la balise tr définie une ligne, td une cellule, $i est égale au nombre de l'url, a href permet d'insérer un lien, le >> sert à écrire à la suite du tableau # reste à augmenter le compteur de 1 fi # FIN IF B) LANGUE JAPONAISE ET AUTRES (cas avec recode) ################################################################################################ fi # la boucle reprend pour les 50 cas nombreOccurrenceGlobale=`expr $nombreOccurrenceGlobale + $nombreOccurrence` i=`expr $i + 1`; #le compteur permet de comtabiliser pour les fichiers globaux done # TABLEAU BAS (avec concaténation dump et contexte, mais aussi le comptage des aspirations) ################################################################################################ echo "<tr><td colspan="2" bgcolor="DarkGray"><td align="center" bgcolor="yellow">TOTAL ASPIRATION<br>$c</td><td bgcolor="DarkGray"></td><td align="center" bgcolor="yellow"><a href=\"../DUMP-TEXT/$j"DumpGlobal"/DumpGlobal.txt\">DUMP GLOBAL<a><br>$compteurGlobalDump</td><td bgcolor="DarkGray"></td><td align="center" bgcolor="yellow"><a href=\"../CONTEXTES/$j"ContexteGlobal"/ContexteGlobal.txt\">CONTEXTE GLOBAL<a><br>$nombreOccurrenceGlobale</td><td colspan="3" bgcolor="DarkGray"></td></tr>">> $tablo; nombreOccurrenceGlobale=0; j=`expr $j + 1`; done #la boucle finie, on écrit la fin du tablo : echo "</table></body></html>" >> $tablo;