Scripts
Scripts Bash
Le script pour préparer l'environnement de travail
#!/bin/bash
mkdir ./CONTEXTES;
mkdir ./CONTEXTES/HTML;
mkdir ./DUMP-TEXT;
mkdir ./IMAGES;
mkdir ./PAGES-ASPIREES;
mkdir ./PROGRAMMES;
mkdir ./TABLEAUX;
mkdir ./URLS;
Le script pour la construction de corpus
#!/usr/bin/bash
#---------------------------------------------------------------------
# MODE D'EMPLOI DU PROGRAMME :
# 1. On se place dans le dossier PROJET
# 2. On lance le programme comme ceci :
# bash ./PROGRAMMES/projetmouvement.sh ./URLS ./TABLEAUX/tableau.html "motif"
# 3. Il faut préalablement installer lynx et readable.
# 4. Un répertoire nommé 'HTML' a été ajouté dans l'arboresence des répertoires de travail (sous le répertoire 'CONTEXTES')
# Les motifs choisis : mouvement|socialmovements|industrialactions|socialmovement|industrialaction|mouvementsocial|mouvementssociaux|社會運動|社会运动
#
#---------------------------------------------------------------------
# input du programme : le nom du DOSSIER contenant les fichiers d'URLs est donné en premier argument
# output du programme : le nom du tableau HTML de sortie est donné en second argument
#----------------------------------------------------------------------
# on récupère les arguments du programme et on les stocke dans des variables
dossierURL=$1;
montableau=$2;
motif=$3;
# Création des fonctions
#fonction 1 : cette fonction est utilisée pour les traitements des urls chinois
traitement_zh ()
{
# étape 1 : pour les urls chinois, lynx et readable sont utilisés séparemment pour différents type d'urls chinois (voir dans le programme principal.)
# étape 2 : segmenter les textes chinois
echo"--------segmentation du texte $compteur_tableau-$compteur -------------"
bash ./PROGRAMMES/stanford-segmenter/segment.sh -k pku ./DUMP-TEXT/"$compteur_tableau-$compteur".txt UTF-8 0 | sed -e "s/社会 运动/社会运动/g" -e "s/社會 運動/社會運動/g" > ./DUMP-TEXT/seg_"$compteur_tableau-$compteur".txt;
# étape 3 : compter la fréquence du motif choisi
compteurmotif=$(egrep -o -i $motif ./DUMP-TEXT/"seg_$compteur_tableau-$compteur".txt | wc -l);
# étape 4 : construire des contextes au format txt autour des motifs choisis avec egrep
egrep -C 2 -i "$motif" ./DUMP-TEXT/"seg_$compteur_tableau-$compteur".txt > ./CONTEXTES/"$compteur_tableau-$compteur".txt;
# étape 5 : donner á voir ces contextes au format HTML
perl ./PROGRAMMES/minigrepmultilingue-v2/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/seg_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2/motif-2020.txt ;
mv resultat-extraction.html ./CONTEXTES/HTML/"$compteur_tableau-$compteur".html;
# étape 6 : construire l'index hiérarchique de chaque dump
tr " " "\n" < ./DUMP-TEXT/seg_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ;
# étape 7 : calculer la fréquence du bigramme
tr " " "\n" < ./DUMP-TEXT/seg_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > index1.txt ;
tail -n +2 index1.txt > index2.txt;
paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ;
}
#fonction 2 : cette fonction est utilisée pour les traitements des urls non chinois
traitement_nonzh()
{
# étape 1 : Dumper les pages aspirées
readable ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html -p text-content | sed -e "s/social movements/socialmovements/g" -e "s/industrial actions/industrialactions/g" -e "s/mouvement social/mouvementsocial/g" -e "s/industrial action/industrialaction/g" -e "s/social movement/socialmovement/g" -e "s/mouvements sociaux/mouvementssociaux/g" > ./DUMP-TEXT/"utf8_$compteur_tableau-$compteur".txt;
# étape 2 : compter la fréquence des motifs choisis
compteurmotif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
# étape 3 : construire des contextes au format txt autour des motifs choisis avec egrep
egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
# étape 4 : donner à voir ces contextes au format HTML
perl ./PROGRAMMES/minigrepmultilingue-v2/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2/motif-2020.txt ;
mv resultat-extraction.html ./CONTEXTES/HTML/"$compteur_tableau-$compteur".html;
# étape 5 : construire l'index hiérarchique de chaque dump
egrep -i -o "\w+" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ;
# étape 6 : calculer la fréquence du bigramme
tr " " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > index1.txt ;
tail -n +2 index1.txt > index2.txt;
paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ;
}
#fonction 3 : écriture du tableau
ecriture_tableau_zh ()
{
# écriture dans le tableau final pour les urls chinois
echo "$compteur | $codehttp | $encodageURL | $ligne | P.A n°$compteur | DUMP n°$compteur | $compteurmotif |
contexte $compteur_tableau-$compteur |
contexte $compteur_tableau-$compteur |
index $compteur_tableau-$compteur |
bigramme $compteur_tableau-$compteur |
" >>$montableau;
}
# fonction 4 : écriture du tableau
message_debut_traitement ()
{
echo "HTTP"
echo "<$compteur_tableau><$compteur><$ligne><$codeHttp><$encodageURL>";
}
#fonction 5 : écriture du tableau
ecriture_tableau_nonzh ()
{
# écriture dans le tableau final pour les urls non chinois
echo "$compteur | $codehttp | $encodageURL | $ligne | P.A n°$compteur | DUMP n°$compteur | $compteurmotif |
contexte $compteur_tableau-$compteur |
contexte $compteur_tableau-$compteur |
index $compteur_tableau-$compteur |
bigramme $compteur_tableau-$compteur |
" >>$montableau;
}
#fonction 6 : écriture du tableau
ecriture_urlnonvalide ()
{
echo "$compteur | $codehttp | - | $ligne | - | - | - | - | - | - | - |
" >>$montableau;
}
# Programme principal
# Ecriture début du fichier HTML de sortie
echo "" >> $montableau;
# le compteur des fichiers d'URL et des tableaux associés
compteur_tableau=1;
for fichier in $(ls $dossierURL)
do
# pour chaque fichier d'url, on va créer un nouveau tableau
echo "" >> $montableau;
#compteur d'URL
compteur=1;
echo "TABLE $compteur_tableau |
" >> $montableau;
echo "N° URL | CODE HTTP | Encodage | URL | P.A | DUMP | CPT MOTIF | Contextes txt | Contextes html | Index | Bigrammes |
" >>$montableau;
#Lire ligne à ligne le fichier d'URL
while read ligne
do
# Chaque URL lue est traitée et permet de remplir le tableau html de sortie
echo "*********************************************************";
echo "TRAITEMENT EN COURS: $ligne";
# voir si la détection url se passe bien avec curl
# on crée une variable qui va récupérer la valeur http_code généré par curl
codehttp=$(curl -L -o ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html $ligne -w %{http_code});
if [[ $codehttp == 200 ]]
then
encodageURL=$(httpstat $ligne | egrep -i "charset" | cut -d"=" -f2 | tr [a-z] [A-Z] | tr -d "\r");
echo "<$encodageURL>";
# s'il s'agit du fichier des urls chinois, on réalise les traitements suivants.
if [[ $compteur_tableau == "1" ]]
then
if [[ $encodageURL == "UTF-8" ]]
then
message_debut_traitement
# Dumper les pages aspirées
lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/"$compteur_tableau-$compteur".txt;
traitement_zh
ecriture_tableau_zh
else
echo"HTTP ok encodage non UTF8"
if [[ $encodageURL != "" ]]
then
response=$(iconv -l | egrep -i "$encodageURL");
if [[ response != "" ]]
then
message_debut_traitement
# Dumper les pages aspirées
readable ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html -p text-content > ./DUMP-TEXT/"$compteur_tableau-$compteur".txt;
traitement_zh
ecriture_tableau_zh
fi
elif [[ $encodageURL == "" ]]
then
echo "-----------recherche l'encodage avec detect encoding---------------"
encodageURL=$(./PROGRAMMES/detect-encoding-osx ./PAGES-ASPIREES/$compteur_tableau-$compteur.html);
response=$(iconv -l | egrep -i "$encodageURL");
if [[ response != "" ]]
then
message_debut_traitement
readable ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html -p text-content > ./DUMP-TEXT/"$compteur_tableau-$compteur".txt;
traitement_zh
echo "$compteur | $codehttp | $encodageURL via detect | $ligne | P.A n°$compteur | DUMP n°$compteur | $compteurmotif |
contexte $compteur_tableau-$compteur |
contexte $compteur_tableau-$compteur |
index $compteur_tableau-$compteur |
bigramme $compteur_tableau-$compteur |
" >>$montableau;
fi
else
echo "PB encodageURL "
ecriture_urlnonvalide
fi
fi
# s'il s'agit du fichier des urls non chinois, on réalise les traitements suivants.
else
if [[ $encodageURL == "UTF-8" ]]
then
message_debut_traitement
traitement_nonzh
ecriture_tableau_nonzh
else
echo"HTTP ok encodage non UTF8"
if [[ $encodageURL != "" ]]
then
response=$(iconv -l | egrep -i "$encodageURL");
if [[ response != "" ]]
then
message_debut_traitement
traitement_nonchinois
ecriture_tableau_nonzh
fi
elif [[ $encodageURL == "" ]]
then
echo "-----------recherche l'encodage avec detect encoding---------------"
encodageURL=$(./PROGRAMMES/detect-encoding-osx ./PAGES-ASPIREES/$compteur_tableau-$compteur.html);
message_debut_traitement
traitement_nonchinois
ecriture_tableau_nonzh
else
# pour les urls inutiles
echo "PB encodageURL "
ecriture_urlnonvalide
fi
fi
fi
else
# pour les urls inutiles
echo "PB HTTP ----------------------------------"
echo "<$compteur_tableau><$compteur><$ligne><$codeHttp>";
ecriture_urlnonvalide
fi ;
# écriture finales du tableau
compteur=$((compteur+1));
done < $dossierURL/$fichier
echo "
" >>$montableau;
echo "
" >>$montableau;
compteur_tableau=$((compteur_tableau+1));
done
echo "" >> $montableau;
Le script pour la concaténation des textes
#!/usr/bin/bash
for file in $(ls ./DUMP-TEXT/seg_1-*.txt);
do echo "" >> corpus_dump_zh.txt;
cat $file >> corpus_dump_zh.txt; | tr -d ">" | tr -d "<" ;
echo "" >> corpus_dump_zh.txt;
done ;
for file in $(ls ./DUMP-TEXT/utf8_2-*.txt);
do echo "" >> corpus_dump_en.txt;
cat $file >> corpus_dump_en.txt; | tr -d ">" | tr -d "<" ;
echo "" >> corpus_dump_en.txt;
done ;
for file in $(ls ./DUMP-TEXT/utf8_3-*.txt);
do echo "" >> corpus_dump_fr.txt;
cat $file >> corpus_dump_fr.txt; | tr -d ">" | tr -d "<" ;
echo "" >> corpus_dump_fr.txt;
done ;
for file in $(ls ./CONTEXTES/1-*.txt);
do echo "" >> corpus_contexte_zh.txt;
cat $file >> corpus_contexte_zh.txt; | tr -d ">" | tr -d "<" ;
echo "" >> corpus_contexte_zh.txt;
done ;
for file in $(ls ./CONTEXTES/utf8_2-*.txt);
do echo "" >> corpus_contexte_en.txt;
cat $file >> corpus_contexte_en.txt; | tr -d ">" | tr -d "<" ;
echo "" >> corpus_contexte_en.txt;
done
for file in $(ls ./CONTEXTES/utf8_3-*.txt);
do echo "" >> corpus_contexte_fr.txt;
cat $file >> corpus_contexte_fr.txt; | tr -d ">" | tr -d "<" ;
echo "" >> corpus_contexte_fr.txt;
done ;
Script Python pour la suppresion des mots-vides
#!/usr/bin/env python
# coding: utf-8
import nltk
from nltk.corpus import stopwords
def cleancorpus(text):
clean = list()
liste_words = text.split()
clean =[word.lower() for word in liste_words if word.lower() not in fr_stopwords]
text = " ".join(clean)
return text
fr_stopwords = stopwords.words('french')
with open("./ALLTEXTS/DUMP/corpus_dump_fr.txt", 'r') as file:
filefr = file.read()
with open ("./ALLTEXTS/DUMP/corpus_dump_frC.txt", 'w') as file:
fileclean = cleancorpus(filefr)
file.write(fileclean)