#!/bin/bash #programme_tableau.sh - Camille REY # génère un ou plusieurs tableaux html d'URLs avec diverses informations, dont l'analyse d'un motif, à partir d'un ou plusieurs fichiers contenant une liste d'URLs # prend en argument : 1- le répertoire contenant les fichiers d'URLs 2- le chemin de sortie du fichier html contenan le ou les Tableaux # demande à l'utilisateur quel motif doit être analysé pour chaque langue # segmente le contenu de l'URL si il est en japonais #fonction pour remplir une ligne de tableau html ligne_tableau () { ligne_tab="" for arg in "$@" do ligne_tab="$ligne_tab$arg" done ligne_tab="$ligne_tab" echo $ligne_tab } #fonction pour créer un lien html lien () { lien=$1 nom=$2 lien_html=$''$nom'' echo $lien_html } #fonction pour récupérer l'encodage d'une page get_encodage () { encodage=$(curl -sIL -o tmp.txt -w %{content_type} $1 | cut -f2 -d"=" | tr '[a-z]' '[A-Z]' | tr -d '\r') if [[ $encodage != "UTF-8" ]] then encodage=$(curl -sL $1 | egrep -oi -m 1 "charset=\"?[^/>\"]*" | cut -f2 -d"=" | tr -d "[\"/ >\r]" | tr '[a-z]' '[A-Z]') if [[ $encodage != "UTF-8" ]] then if [[ $encodage == "" ]] then encodage=$(file -b --mime-encoding $2) if [[ $(iconv -l | egrep "\b$encodage\b") == "" ]] then encodage=$encodage"(INCONNU)" fi else if [[ $(iconv -l | egrep "\b$encodage\b") == "" ]] then encodage=$(file -b --mime-encoding $2) if [[ $(iconv -l | egrep "\b$encodage\b") == "" ]] then encodage=$encodage"(INCONNU)" fi fi fi fi fi } #supprimer le fichier du même nom s'il existe déjà rm -f $2; #récupérer les motifs i=1; for fichier in $(ls $1) do echo "Quel est le motif à chercher pour le fichier $fichier ?" read motif$i; i=$((i+1)); done #début de page html numerotableau=1; echo "Tableaux d'URL" >> $2; for fichier in $(ls $1) do compteur=1; motif_courant=motif$numerotableau; echo "MOTIF=${!motif_courant}" > ./minigrep/$numerotableau.txt echo "

$fichier

" >> $2; contenu_ligne=( "Numéro" "Lien" "Code http" "Encodage" "Page aspirée" "Dump" "Contexte txt" "Contexte html" "index" "bitexte" "fréquence motif"); echo $(ligne_tableau "${contenu_ligne[@]}") >> $2; for ligne in $(cat $1/$fichier) do id_ligne=$numerotableau-$compteur; #tester valeur du coderetour coderetour=$(curl -sIL -o tmp.txt -w %{http_code} $ligne); if [[ $coderetour == 200 ]] then #récupérer localement l'URL curl -sL -o "./PAGES-ASPIREES/$id_ligne.html" $ligne; #gérer le cas de fichier compressé if [[ $(file -b --mime-type "./PAGES-ASPIREES/$id_ligne.html" | egrep "zip") != "" ]] then echo "compressé" mv "./PAGES-ASPIREES/$id_ligne.html" "./PAGES-ASPIREES/$id_ligne.gz"; gunzip -c "./PAGES-ASPIREES/$id_ligne.gz" > "./PAGES-ASPIREES/$id_ligne.html"; rm "./PAGES-ASPIREES/$id_ligne.gz"; fi get_encodage $ligne "./PAGES-ASPIREES/$id_ligne.html" if [[ ${encodage: -9} == "(INCONNU)" ]] then # écriture d'une ligne si l'encodage est inconnu contenu_ligne=( $compteur "$(lien $ligne $ligne)" $coderetour $encodage "$(lien ../PAGES-ASPIREES/$id_ligne.html $id_ligne)" "-" "-" "-" "-" "-" "-" ); echo $(ligne_tableau "${contenu_ligne[@]}") >> $2; else #dump en txt w3m -dump -I $encodage -O $encodage "./PAGES-ASPIREES/$id_ligne.html" > ./DUMP-TEXT/$id_ligne.txt #conversion si besoin if [[ $encodage != "UTF-8" ]] then iconv -f $encodage -t UTF-8 ./DUMP-TEXT/$id_ligne.txt > ./DUMP-TEXT/UTF8_$id_ligne.txt mv -f ./DUMP-TEXT/UTF8_$id_ligne.txt ./DUMP-TEXT/$id_ligne.txt encodage=$encodage"(converti_UTF8)" fi #segmentation si le texte est du japonais if [[ $(cat ./DUMP-TEXT/$id_ligne.txt | grep -P "([ぁ-んァ-ン一-龯]){3,}") != "" ]] then python3 PROGRAMMES/segmenteur_jap.py DUMP-TEXT/$id_ligne.txt DUMP-TEXT/segmente_$id_ligne.txt mv -f ./DUMP-TEXT/segmente_$id_ligne.txt ./DUMP-TEXT/$id_ligne.txt fi #variable expansion / ! --> variable indirection #contexte txt egrep -i -C2 ${!motif_courant} ./DUMP-TEXT/$id_ligne.txt > ./CONTEXTES/$id_ligne.txt #contexte html perl ./minigrep/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$id_ligne.txt ./minigrep/$numerotableau.txt mv resultat-extraction.html ./CONTEXTES/$id_ligne.html #index hierarchique egrep -o "\w+" ./DUMP-TEXT/$id_ligne.txt | sort | uniq -c | sort -nr -k 1,1 > ./DUMP-TEXT/index-$id_ligne.txt #bigrammes egrep -o "\w+" ./DUMP-TEXT/$id_ligne.txt > ./bigramme1.txt ; tail -n +2 ./bigramme1.txt > ./bigramme2.txt ; paste bigramme1.txt bigramme2.txt > bigramme3.txt ; cat bigramme3.txt | sort | uniq -c | sort -nr -k 1,1 > ./DUMP-TEXT/bigramme-$id_ligne.txt #fréquence motif fq_motif=$(egrep -coi ${!motif_courant} ./DUMP-TEXT/$id_ligne.txt) # écriture d'une ligne dans le tableau si tout va bien contenu_ligne=( $compteur "$(lien $ligne $ligne)" $coderetour $encodage "$(lien ../PAGES-ASPIREES/$id_ligne.html $id_ligne)" "$(lien ../DUMP-TEXT/$id_ligne.txt $id_ligne)" "$(lien ../CONTEXTES/$id_ligne.txt $id_ligne)" "$(lien ../CONTEXTES/$id_ligne.html $id_ligne)" "$(lien ../DUMP-TEXT/index-$id_ligne.txt $id_ligne)" "$(lien ../DUMP-TEXT/bigramme-$id_ligne.txt $id_ligne)" $fq_motif) echo $(ligne_tableau "${contenu_ligne[@]}") >> $2; fi else #écriture d'une ligne dans le cas de code http différent de 200 contenu_ligne=( $compteur "$(lien $ligne $ligne)" $coderetour "-" "-" "-" "-" "-" "-" "-" "-" ); echo $(ligne_tableau "${contenu_ligne[@]}") >> $2; fi compteur=$((compteur+1)); done echo "
" >> $2; numerotableau=$((numerotableau+1)); done