Cours 10 - Reconstruction du code (Refactoring)
N.B.
Les explications de chaque commande ou de chaque bloc de codes sont données dans les commentaires.
Pour que notre script final soit plus lisible et clair, nous avons essayé de remanier notre code en mettant des blocs de code répétitifs dans des fonctions. Grâce aux exemples fournis dans le blog d’un ancien camarade, nous avons pu comprendre le foctionnement des fonctions en bash dans un cas précis et concret.
Script principal
#!/bin/bash
# importer les fonctions
. /Users/becca/Documents/nlp/coursS1/projetEncadre/PROJET-MOT-SUR-LE-WEB/PROGRAMMES/functions.sh
#--------------------Main part-----------------#
# on commence par supprimer l'éventuel fichier de résultat que l'on doit reconstruire
rm -f "$2/tableau2.html" ;
# on récupère les 2 arguments que l'on a passé au programme
# le premier : chemin vers le dossier contenant les fichiers d'URL
# le second : chemin vers le dossier devant contenir le fichier HTML final
echo "Les urls SONT DANS : $1" ;
echo "On créé le tableau HTML dans : $2" ;
# output=$($2/tableau2.html)
ecrireMetaData $2/tableau2.html
# Création d'une variable pour compter les fichiers traités et donc le nb de tableau généré
numerotableau=1;
# Création d'une variable pour stocker notre terme ciblé
motif=$3;
# Parcours du dossier contenant les fichiers URLs
for fichier in $(ls $1)
do
compteur=1; # compteur destiné à compter les URLs pour chaque fichier d'URL
echo "$1/$fichier" ;
#-----------------------------------------------------------
# Création du tableau associé au fichier en cours de traitement
#-----------------------------------------------------------
ecrireTitre $2/tableau2.html
# "parcours" d'un fichier d'URL : lecture ligne à ligne des URLs
for ligne in $(cat "$1/$fichier")
do
codeRetour=$(detHttpCode $ligne);
if [[ $codeRetour == 200 ]]
then
encodage=$(detEncodage1 $ligne);
curl -L -o "../PAGES-ASPIREES/$numerotableau-$compteur.html" "$ligne";
echo "ENCODAGE DETECTE PAR CURL : $encodage";
if [[ $encodage == "UTF-8" ]]
then
procUtf8 $2/tableau2.html
else # http_code=200, l'encodage n'est pas utf-8
encodage=$(detEncodage2 $ligne)
if [[ $encodage == "UTF-8" ]]
then
procUtf8 $2/tableau2.html
else
code=$(iconv -l|egrep -i $encodage)
if [[ $code=true ]]
then
iconv -f $encodage -t 'utf-8' ../DUMP-TEXT/$numerotableau-$compteur.txt > ../DUMP-TEXT/$numerotableau-$compteur-converti.txt
else
procVide $2/tableau2.html
fi
fi
fi
else
procVide $2/tableau2.html
fi
compteur=$((compteur+1)) ;
done
echo "</table><br />" >> $2/tableau2.html ;
# on incrémente le compteur de tableaux
numerotableau=$((numerotableau+1));
done
echo "</body></html>" >> $2/tableau2.html ;
Fonctions
## functions
# 1 html head
ecrireMetaData(){
echo "<!DOCTYPE html>" > $1
echo "<html lang=\"en\">" >> $1
echo "<head><meta charset="UTF-8"><title>Projet Encadre</title></head>" >> $1
echo "<body>" >> $1
}
# 2 table title
ecrireTitre(){
echo "<table border=\"2\" align=\"center\" width=\"80%\">" >> $1
echo "<tr bgcolor=\"grey\"><td>N°</td><td>URL</td><td>Code http</td><td>encodage</td><td>Page aspirée</td><td>Dump</td><td>Filtrage Txt</td><td>Filtrage Html</td><td>Index</td><td>Bitexte</td><td>Fq Motif</td></tr>" >> $1
}
# 3 get http_code
detHttpCode(){
curl -SIL -o toto -w "%{http_code}" $1
}
# 4 two ways to get encoding
detEncodage1(){
curl -sIL -o toto -w %{content_type} $1 | cut -f2 -d"=" | tr '[a-z]' '[A-Z]' | tr -d '\r'
}
detEncodage2(){
egrep -oi 'charset="?[^",]+"?' $1 | cut -f2 -d"=" | tr '[a-z]' '[A-Z]' | tr -d '\r'| head -1
}
# 5 process text when encoding is utf-8
procUtf8(){
# 1. On lynx la page aspirée
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage "../PAGES-ASPIREES/$numerotableau-$compteur.html" > ../DUMP-TEXT/$numerotableau-$compteur.txt;
#-----------------------------------------------------------
# 2. On cree le fichier contexte TXT via egrep
egrep -i -C2 "$motif" ../DUMP-TEXT/$numerotableau-$compteur.txt > ../CONTEXTE/$numerotableau-$compteur.txt;
#-----------------------------------------------------------
# 3. Fq motif
nbmotif=$(egrep -coi "$motif" ../DUMP-TEXT/$numerotableau-$compteur.txt;);
#-----------------------------------------------------------
# 4. contexte html
../minigrep/minigrepmultilingue.pl "utf-8" ../DUMP-TEXT/$numerotableau-$compteur.txt ../minigrep/motif-regexp.txt ;
mv resultat-extraction.html ../CONTEXTES/$numerotableau-$compteur.html ;
#-----------------------------------------------------------
# 5. index hierarchique
egrep -o "\w+" ../DUMP-TEXT/$numerotableau-$compteur.txt | sort | uniq -c | sort -r > ../DUMP-TEXT/index-$numerotableau-$compteur.txt ;
#-----------------------------------------------------------
# 6. bigramme
egrep -o "\w+" ../DUMP-TEXT/$numerotableau-$compteur.txt > bi1.txt;
tail -n +2 bi1.txt > bi2.txt ;
paste bi1.txt bi2.txt > bi3.txt ;
cat bi3.txt | sort | uniq -c | sort -r > ../DUMP-TEXT/bigramme-$numerotableau-$compteur.txt ;
#-----------------------------------------------------------
# 7. on écrit les résultats dans le tableau avec tous les résultats produits
echo "<tr>
<td>$compteur</td>
<td><a href=\"$ligne\" target=\"_blank\">$ligne</a></td>
<td>Code_http:$codeRetour</td>
<td>Encodage:$encodage</td>
<td><a href=\"../PAGES-ASPIREES/$numerotableau-$compteur.html\">$numerotableau-$compteur.html</a></td>
<td><a href=\"../DUMP-TEXT/$numerotableau-$compteur.txt\">$numerotableau-$compteur.txt</a></td>
<td><a href=\"../CONTEXTES/$numerotableau-$compteur.txt\">$numerotableau-$compteur.txt</a></td>
<td><a href=\"../CONTEXTES/$numerotableau-$compteur.html\">$numerotableau-$compteur.html</a></td>
<td><a href=\"../DUMP-TEXT/index-$numerotableau-$compteur.txt\">index-$numerotableau-$compteur</a></td>
<td><a href=\"../DUMP-TEXT/bigramme-$numerotableau-$compteur.txt\">bigramme-$numerotableau-$compteur</a></td>
<td>$nbmotif</td>
</tr>" >> "$1"
}
# 6 write "-" in table
procVide(){
echo "<tr>
<td>$compteur</td>
<td><a href=\"$ligne\" target=\"_blank\">$ligne</a></td>
<td>Code_http:$codeRetour</td>
<td>Encodage:$encodage</td>
<td><a href=\"../PAGES-ASPIREES/$numerotableau-$compteur.html\">$numerotableau-$compteur.html</a></td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>" >> "$1"
}