#!/usr/bin/bash # MODE D'EMPLOI DU PROGRAMME : # bash programme_tableau.sh NOM_DOSSIER_URL NOM_FICHIER_HTML motif # $1 dossier url # $2 fichier html # $3 motif # ----------------------------------------------------------------------------------------------- # définition d'un code couleur pour l'affichage des traitements green="tput setaf 2" ; red="tput setaf 1" ; reset="tput sgr0" ; # ----------------------------------------------------------------------------------------------- # réaffectation des arguments pour qu'ils puissent être utilisés par la fonction processingutf-8 argument1=$1 ; argument2=$2 ; argument3=$3 ; # ----------------------------------------------------------------------------------------------- # extraction du motif recherché dans le fichier motif de minigrep echo "MOTIF=$3" > ./PROGRAMMES/motif.txt ; # ----------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------- # Fonction processingutf8 qui opère les traitements sur un dump en UTF-8 processingutf8() { if [[ $compteurtableau == "3" ]] # reconnaissance de la langue chinoise pour ne pas lancer la segmentation systématiquement then $green ; echo "je lance le script de segmentation :" ; $reset ; # conservation des dumps chinois non-segmentés mv ./DUMP-TEXT/$compteurtableau-$compteururl.txt ./DUMP-TEXT/PRESEG/$compteurtableau-$compteururl.txt ; # segmentation des dumps chinois bash ./PROGRAMMES/stanford-segmenter/segment.sh -k ctb ./DUMP-TEXT/PRESEG/$compteurtableau-$compteururl.txt "UTF-8" "0" > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; $green ; echo "fin d'execution du script" ; $reset ; else $green ; echo "le dump n'a pas besoin d'être segmenté" ; $reset ; fi # extraction du nombre d'occurences des motifs fqmotif=$(egrep -coi "$argument3" ./DUMP-TEXT/$compteurtableau-$compteururl.txt); $green ; echo "Il y a $fqmotif fois le mot $argument3 sur cette page" ; $reset ; # extraction des contextes egrep -i --color "$argument3" ./DUMP-TEXT/$compteurtableau-$compteururl.txt > ./CONTEXTES/$compteurtableau-$compteururl.txt; $green ; echo "J'ai extrait les contextes dans un fichier" ; $reset ; # lancement de minigrep $green ; echo "je lance minigrep :" ; $reset ; perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$compteurtableau-$compteururl.txt ./PROGRAMMES/motif.txt ; # déplacement du résultat mv resultat-extraction.html ./CONTEXTES/CONTEXTESminigrep/$compteurtableau-$compteururl.html ; $green ; echo "J'ai extrait des contextes avec minigrep" ; $reset ; # extraction de l'index hiérarchique egrep -o "\w+" ./DUMP-TEXT/$compteurtableau-$compteururl.txt | sort | uniq -c | sort -r > ./INDEX/$compteurtableau-$compteururl.txt ; $green ; echo "J'ai extrait l'index hiérarchique dans un fichier" ; $reset ; # extraction des bigrammes egrep -o "\w+" ./DUMP-TEXT/$compteurtableau-$compteururl.txt > bi1.txt; tail -n +2 bi1.txt > bi2.txt ; paste bi1.txt bi2.txt > bi3.txt ; cat bi3.txt | sort | uniq -c | sort -rn > ./BIGRAMMES/$compteurtableau-$compteururl.txt ; $green ; echo "J'ai extrait les bigrammes dans un fichier" ; $reset ; # écriture des réultats dans le tableau echo "$compteururl$httpcode$lignePage Aspirée n° $compteurtableau-$compteururl$ENCODAGEDUMP n° $compteurtableau-$compteururl$fqmotifContexte n° $compteurtableau-$compteururlminigrep n° $compteurtableau-$compteururlIndex n° $compteurtableau-$compteururlBigrammes n° $compteurtableau-$compteururl" >> $argument2 ; } # ----------------------------------------------------------------------------------------------- # écriture de l'en-tête du tableau echo "" > $2 ; echo "TABLEAUX URL" >> $2 ; echo "" >> $2 ; #------------------------------------------------------------------------------- compteurtableau=1; for fichier in $(ls $1) { compteururl=1; # écriture des titres du tableau echo "


" >> $2 ; echo "" >> $2 ; echo "" >> $2 ; echo "<" >> $2 ; for ligne in $(cat $1/$fichier) { # vérification du code http httpcode=$(curl -s -L -o tmp.txt -w "%{http_code}" $ligne | tail -1) ; if [[ $httpcode == 200 ]] then # aspiration de la page curl -sL -o ./PAGES-ASPIREES/$compteurtableau-$compteururl.html $ligne ; ENCODAGE=$(curl -sI $ligne | egrep -i "charset=" | cut -f2 -d= | tr -d "\n" | tr -d "\r" | tr "[:lower:]" "[:upper:]"); echo " **************************************************** $compteurtableau ** $compteururl ** $httpcode ** $ENCODAGE *****" ; $green ; echo "J'ai aspiré la page" ; $reset ; # vérification de l'encodage if [[ $ENCODAGE == "UTF-8" ]] then # dump de la page lynx -dump -nolist -assume_charset=$ENCODAGE -display_charset=$ENCODAGE $ligne > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; $green ; echo "j'ai fait un dump de la page via $ENCODAGE" ; $reset ; # lancement des traitements sur le dump processingutf8 else if [[ $ENCODAGE != "" ]] then # vérification de l'encodage avec iconv VERIFENCODAGE=$(iconv -l | egrep "$ENCODAGE" | sort -u | tr -d '\r' | tr -d '\n') ; if [[ $VERIFENCODAGE != "" ]] then $green ; echo "A priori l'encodage est reconnu par iconv" ; $reset ; lynx -dump -nolist -assume_charset=$ENCODAGE -display_charset=$ENCODAGE $ligne > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; echo "J'ai fait un dump (via $ENCODAGE) de $ligne avec lynx" ; # conversion en utf-8 avec iconv iconv -f $ENCODAGE -t utf-8 ./DUMP-TEXT/$compteurtableau-$compteururl.txt > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; $green ; echo "J'ai converti le dump en UTF-8" ; $reset ; # lancement des traitements sur le dump processingutf8 else # échec $red ; echo "l'encodage n'est pas reconnu par iconv" ; $reset ; echo "" >> $2 ; fi else # si l'encodage est vide, récupération du charset de la page aspirée CHARSET=$(cat ./PAGES-ASPIREES/$compteurtableau-$compteururl.html | egrep -o charset=[a-zA-Z0-9_.-]* | cut -f2 -d"=" | tr -d "\n" | tr -d "\r" | tr "[:lower:]" "[:upper:]") ; echo "Le charset de la page aspirée est $CHARSET" ; # vérification du charset if [[ $CHARSET == "UTF-8" ]] then # dump lynx -dump -nolist -assume_charset=$CHARSET -display_charset=$CHARSET $ligne > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; $green ; echo "j'ai fait un dump de la page via $CHARSET" ; $reset ; # lancement des traitements sur le dump processingutf8 else if [[ $CHARSET != "" ]] then # si le charset n'est pas utf-8 mais pas vide, dump de la page dans le charset en question lynx -dump -nolist -assume_charset=$CHARSET -display_charset=$CHARSET $ligne > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; echo "J'ai fait un dump (via $CHARSET) de $ligne avec lynx" ; # vérification de ce charset avec iconv VERIFENCODAGE=$(iconv -l | egrep "$CHARSET" | sort -u | tr -d '\r' | tr -d '\n') ; if [[ $VERIFENCODAGE != "" ]] then $green ; echo "A priori l'encodage est reconnu par iconv" ; $reset ; # conversion du dump vers utf-8 avec iconv iconv -f $ENCODAGE -t utf-8 ./DUMP-TEXT/$compteurtableau-$compteururl.txt > ./DUMP-TEXT/$compteurtableau-$compteururl.txt ; $green ; echo "J'ai converti le dump en UTF-8" ; $reset ; # lancement des traitements sur le dump processingutf8 else # echec $red ; echo "l'encodage n'est pas reconnu par iconv" ; $reset ; echo "" >> $2 ; fi else # échec $red ; echo "L'encodage n'est pas récupérable" ; $reset ; echo "" >> $2 ; fi fi fi fi else echo " **************************************************** $compteurtableau ** $compteururl ** $httpcode ** $ENCODAGE ****" ; # échec $red ; echo "Le code http n'est pas bon" ; $reset ; echo "" >> $2 ; fi # incrémentation des compteurs let "compteururl=compteururl+1"; } echo "
tableau n° $compteurtableau
http codeLienPage AspiréeEncodage InitialDUMP UTF-8Fréquence motifsContextesContextes minigrepIndexBigrammes
$compteururl$httpcode$lignePage Aspirée n° $compteurtableau-$compteururl$ENCODAGE
$compteururl$httpcode$lignePage Aspirée n° $compteurtableau-$compteururl$CHARSET-DUMP n° $compteurtableau-$compteururl
$compteururl$httpcode$lignePage Aspirée n° $compteurtableau-$compteururlencodage irrécupérable
$compteururl$httpcode$ligne
" >> $2 ; let "compteurtableau=compteurtableau+1"; } #------------------------------------------------------------------------------- # concaténation des contextes for fichier in $(ls ./CONTEXTES/ |egrep "\.txt") do echo -e "\n" >> ./CONTEXTES/CONCAT/contextes-concat.txt ; cat ./CONTEXTES/$fichier >> ./CONTEXTES/CONCAT/contextes-concat.txt ; echo -e "\n\n" >> ./CONTEXTES/CONCAT/contextes-concat.txt ; done ; # concaténation des dumps for fichier2 in $(ls ./DUMP-TEXT/ |egrep "\.txt") do echo -e "\n" >> ./DUMP-TEXT/CONCAT/dt-concat.txt ; cat ./DUMP-TEXT/$fichier2 >> ./DUMP-TEXT/CONCAT/dt-concat.txt ; echo -e "\n\n" >> ./DUMP-TEXT/CONCAT/dt-concat.txt ; done ; $green ; echo "J'ai concaténé les dump et les contextes dans un autre fichier" ; $reset ; #------------------------------------------------------------------------------- # écriture de la fin du tableau echo "" >> $2 ; echo "" >> $2 ; #------------------------------------------------------------------------------- # arrêt du programme exit;