- Script du projet
Vous pouvez télécharger le script du projet ici. Et voir toutes les étapes qui ont mené à sa création sur notre blog.
#!/usr/bin/bash #------------------------------------------------------- # pour lancer ce script: # bash premierscript.sh
#------------------------------------------------------- # stockage des arguments dans des variables : DOSSIER_URL=$1; DOSSIER_TABLEAUX=$2; #------------------------------------------------------- # validation des arguments (ou arrêt du programme) -> s'assurer qu'ils ne sont pas vides et que ce sont des dossiers existants if [[ "$#" -ne 2 ]] # alternative : if [ -z "$*" ] then echo "Cette commande requiert deux arguments" exit; else if [[ ! -d $1 ]] || [[ ! -d $2 ]] then echo "Les arguments doivent être des dossiers existants" exit; else echo $DOSSIER_URL echo $DOSSIER_TABLEAUX fi fi #------------------------------------------------------- # avant de commencer, on vide les dossiers rm ./PAGES-ASPIREES/* rm ./DUMP-TEXT/* rm ./CONTEXTES/* rm ./FICHIERS-CONCAT/* #------------------------------------------------------- # on instancie les variables cptTableau=0; # Ευρωπαϊκή Ένωση|Ε.Ε.|ΕΕ|União Europeia|UE|Europa motif="(EU|Europäischen? Union|UE|Union européenne|European Union|Ευρωπαϊκή Ένωση|Ε.Ε.|ΕΕ|União Europeia|UE)" #------------------------------------------------------- # en-tête du fichier html, avec un style intégré pour avoir un tableau plus lisible # mise en place d'un index des tableaux à l'aide d'ancres pour pouvoir accéder au tableau souhaité plus facilement echo "<html> <head> <meta charset =\"UTF8\"> <style> th, td { padding: 10px; border: 1px solid black; word-break: break-all; } tr:nth-child(even) { background-color: #EEEEEE; } </style> </head> <body> <h2 id=indextable>Index des tableaux</h2> <a href=\"#DE.txt\">Tableau n°1 DE</a><br> <a href=\"#EL.txt\">Tableau n°2 EL</a><br> <a href=\"#EN.txt\">Tableau n°3 EN</a><br> <a href=\"#FR.txt\">Tableau n°4 FR</a><br> <a href=\"#PT.txt\">Tableau n°5 PT</a><br><br>" > $DOSSIER_TABLEAUX/tableau.html; #------------------------------------------------------- # pour chaque élément condenu dans DOSSIER_URL for fichier in $(ls $DOSSIER_URL); do echo $fichier; # on incrémente le compteur de tableau cptTableau=$(($cptTableau+1)); # ajout d'un compteur URL : chaque fichier = 1 tableau HTML cptURL=0; #------------------------------------------------------- # à part pour le premier fichier, mettre une ancre pour revenir à l'index des tableaux if [[ $fichier != "DE.txt" ]] then echo "<a href=\"#indextable\"align=center>Retour à l'index des tableaux</a><br>" >> $DOSSIER_TABLEAUX/tableau.html; fi #------------------------------------------------------- # début de tableau et paramétrage du tableau # RQ : sans mise en page, mettre simplement : echo "<table>" >> $DOSSIER_TABLEAUX/tableau.html echo "<table style=\"width: 800px\" align=\"center\" border=\"1px\" bordercolor=black>" >> $DOSSIER_TABLEAUX/tableau.html; # premières lignes descriptives echo "<tr><th colspan=\"11\">Tableau n° $cptTableau</th></tr>" >> $DOSSIER_TABLEAUX/tableau.html; echo "<tr><th colspan=\"11\">Fichier $fichier</tr>" >> $DOSSIER_TABLEAUX/tableau.html; echo "<tr><th colspan=\"11\">MOTIF : ${motif}</th></tr>" >> $DOSSIER_TABLEAUX/tableau.html; echo "<tr><td><nobr>N°</nobr></td><td><nobr>HTTP<br>code</nobr></td><td><nobr>Encodage<br>d'origine</nobr></td> <td><nobr><p> URL </p></nobr></td> <td><nobr><p>Page aspirée</p></nobr></td><td><nobr><p>Dump text</p></nobr></td> <td><nobr>Index</nobr></td><td><nobr>Bigramme</nobr></td><td><nobr><p>Contexte txt</p></nobr></td> <td><nobr><p>Contexte html</p></nobr></td><td><nobr>CPT<br>Motif</nobr></td></tr>" >> $DOSSIER_TABLEAUX/tableau.html; #------------------------------------------------------- # on commence le partitionnement des différents fichiers par langue echo "<L=\"$fichier\">" >> ./FICHIERS-CONCAT/texteconcat$fichier echo "<L=\"$fichier\">" >> ./FICHIERS-CONCAT/contexteconcat$fichier #------------------------------------------------------- # lire chaque fichier du dossier while read line; do #------------------------------------------------------- # on incrémente le compteur URL cptURL=$(($cptURL+1)); #------------------------------------------------------- # variable pour vérifier si la connexion vers l'URL est OK et aspirer les pages des URLS codeHTTP=$(curl -L -w '%{http_code}\n' -o ./PAGES-ASPIREES/"$cptTableau-$cptURL".html $line); #------------------------------------------------------- # si le code HTTP est OK if [[ $codeHTTP==200 ]] # RQ: espace avant et après les crochets car n'entre pas dans le if sinon then # variable pour essayer de repérer l'encodage via CURL encodage=$(curl -L -I $line | sed -n '/HTTP.* 200/,$p' | egrep charset | cut -d "=" -f2 | tr -d '\r' | tr -d '\n' | tr '[:lower:]' '[:upper:]'); #------------------------------------------------------- # si aucun encodage trouvé, tenter de récupérer l'encodage via le code html if [[ $encodage == "" ]] then encodage=$(curl -L -i $line | egrep -o "<meta charset=.*>" | cut -d\" -f2 | tr '[:lower:]' '[:upper:]') fi #------------------------------------------------------- # vérifier si l'encodage fait partie de la liste iconv verif_iconv=$(iconv -l | egrep -io "$encodage" | head -1) #------------------------------------------------------- # si bien de l'UTF-8 ou un autre encodage "reconnu" if [[ $encodage == "UTF-8" || verif_iconv != "" ]] then # l'encodage est bien UTF-8 ou un encodage connuu de iconv -l, on continue # on utilise lynx pour avoir le texte en format brut, on fait du nettoyage avant de le mettre dans un fichier txt texte=$(lynx -nolist --assume_charset=UTF-8 --display_charset=UTF-8 --dump ./PAGES-ASPIREES/"$cptTableau-$cptURL".html) echo "$texte" | grep -v "[\+\*].*" | grep -Ev "jpe?g|png|gif|BUTTON|LIKES|TWEETS|alternate|\s+o |___" > ./DUMP-TEXT/"$cptTableau-$cptURL".txt # RQ : pas obligé de mettre dans une variable avec cette alternative : # lynx -nolist --assume_charset UTF-8 --dump ./PAGES-ASPIREES/"$cptTableau-$cptURL".html > ./DUMP-TEXT/"$cptTableau-$cptURL".txt #------------------------------------------------------- # compteur de motif cptfreq=$(egrep -o "${motif}" ./DUMP-TEXT/$cptTableau-$cptURL.txt | wc -l) #------------------------------------------------------- # création d'index echo "$texte" | egrep -o "\w+'?" | sort | uniq -c | sort -nr > ./DUMP-TEXT/index-"$cptTableau-$cptURL".txt #------------------------------------------------------- # création de bigramme echo "$texte" | egrep -o "\w+'?" > ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt cp ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt sed -i '1i\ ' ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt paste ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt | tail -n +2 | head -n -1 | sort | uniq -c | sort -nr > ./DUMP-TEXT/bigramme-"$cptTableau-$cptURL".txt rm ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt rm ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt #------------------------------------------------------- # création fichier contexte.txt cat "./DUMP-TEXT/"$cptTableau-$cptURL".txt" | tr '\n' '&' | sed 's/& / /g' | tr '&' '\n' | egrep -o "((\w)+(-| |[[:punct:]])+){0,7}${motif}((-| |[[:punct:]])+(\w)+){0,7}" > ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt #------------------------------------------------------- # création fichier contexte.html perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/"$cptTableau-$cptURL".txt ./PROGRAMMES/motif.txt mv resultat-extraction.html ./CONTEXTES/contextehtml-"$cptTableau-$cptURL".html #------------------------------------------------------- # création d'un fichier de concaténation des fichiers dump-text.txt # et un fichier de concaténation des fichiers contextes.txt avec partitionnement # le texte a été modifié par soucis d'uniformisation et afin d'avoir un seul mot pour itrameur echo "<T=\"utf-8_$cptTableau-$cptURL.txt\">" >> ./FICHIERS-CONCAT/texteconcat$fichier echo "<T=\"utf-8_$cptTableau-$cptURL.txt\">" >> ./FICHIERS-CONCAT/contexteconcat$fichier if [[ $fichier == "FR.txt" ]] then cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' | sed 's/& / /g' | tr '&' '\n' | sed 's/Union européenne/UE/g'>> ./FICHIERS-CONCAT/texteconcat$fichier cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/Union européenne/UE/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier fi if [[ $fichier == "DE.txt" ]] then cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' | sed 's/& / /g' | tr '&' '\n' | sed 's/Europäische Union/EU/g' | sed 's/Europäischen Union/EU/g' >> ./FICHIERS-CONCAT/texteconcat$fichier cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/Europäische Union/EU/g' | sed 's/Europäischen Union/EU/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier fi if [[ $fichier == "EN.txt" ]] then cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' | sed 's/& / /g' | tr '&' '\n' | sed 's/European Union/EU/g' >> ./FICHIERS-CONCAT/texteconcat$fichier cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/European Union/EU/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier fi if [[ $fichier == "EL.txt" ]] then cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' | sed 's/& / /g' | tr '&' '\n' | sed 's/Ευρωπαϊκή Ένωση/ΕΕ/g' | sed 's/Ε.Ε./ΕΕ/g' >> ./FICHIERS-CONCAT/texteconcat$fichier cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/Ευρωπαϊκή Ένωση/ΕΕ/g' | sed 's/Ε.Ε./ΕΕ/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier fi if [[ $fichier == "PT.txt" ]] then cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' | sed 's/& / /g' | tr '&' '\n' | sed 's/União Europeia/UE/g' >> ./FICHIERS-CONCAT/texteconcat$fichier cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/União Europeia/UE/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier fi echo "</T>§" >> ./FICHIERS-CONCAT/texteconcat$fichier echo "</T>§" >> ./FICHIERS-CONCAT/contexteconcat$fichier else #------------------------------------------------------- #l'encodage n'est ni UTF-8, ni un encodage "reconnu" echo "autre" echo $encodage fi #------------------------------------------------------- # construire les lignes du tableau echo "<tr><td>$cptURL</td> <td>$codeHTTP</td> <td>$encodage</td> <td><a href=\"$line\">$line</a></td> <td><a href=\"../PAGES-ASPIREES/$cptTableau-$cptURL.html\">P.A."$cptTableau-$cptURL"</a></td> <td><a href=\"../DUMP-TEXT/$cptTableau-$cptURL.txt\">D.T. "$cptTableau-$cptURL"</a></td> <td><a href=\"../DUMP-TEXT/index-$cptTableau-$cptURL.txt\">index "$cptTableau-$cptURL"</a></td> <td><a href=\"../DUMP-TEXT/bigramme-$cptTableau-$cptURL.txt\">bigramme "$cptTableau-$cptURL"</a></td> <td><a href=\"../CONTEXTES/contexte-$cptTableau-$cptURL.txt\">contexte txt"$cptTableau-$cptURL"</a></td> <td><a href=\"../CONTEXTES/contextehtml-$cptTableau-$cptURL.html\">contexte html"$cptTableau-$cptURL"</a></td> <td>$cptfreq</td> </tr>" >> $DOSSIER_TABLEAUX/tableau.html; else #------------------------------------------------------- # construction des lignes du tableau pour une URL inaccessible echo "<tr><td>$cptURL</td> <td>$codeHTTP</td> <td>-</td> <td><a href=\"$line\">$line</a></td> <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>" >> $DOSSIER_TABLEAUX/tableau.html; fi done < $DOSSIER_URL/$fichier; #------------------------------------------------------- # on finit le partitionnement des différents fichiers par langue echo "</L>" >> ./FICHIERS-CONCAT/texteconcat$fichier echo "</L>" >> ./FICHIERS-CONCAT/contexteconcat$fichier #------------------------------------------------------- # rajout d'un lien vers la concaténation dump-text et concaténation contexte à la fin de chaque tableau echo "<tr><th colspan=\"11\"><a href=\"../FICHIERS-CONCAT/texteconcat$fichier\">Concaténation dump-text $fichier</a></th></tr>" >> $DOSSIER_TABLEAUX/tableau.html; echo "<tr><th colspan=\"11\"><a href=\"../FICHIERS-CONCAT/contexteconcat$fichier\">Concaténation contexte $fichier</a></th></tr>" >> $DOSSIER_TABLEAUX/tableau.html; #------------------------------------------------------- # fermeture d'un tableau (et de la lecture d'un fichier) et séparateur echo "</table><HR size=8 width=\"100%\" color=\"black\" align=\"center\">" >> $DOSSIER_TABLEAUX/tableau.html; done; echo "</body></html>" >> $DOSSIER_TABLEAUX/tableau.html;