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 "<tr><td>$compteur</td><td>$codehttp</td><td>$encodageURL</td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a target=\"_blank\" href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n&deg;$compteur</a></td><td><a target=\"_blank\" href=\"../DUMP-TEXT/seg_$compteur_tableau-$compteur.txt\">DUMP n&deg;$compteur</a></td><td>$compteurmotif</td>
		<td><a href=\"../CONTEXTES/$compteur_tableau-$compteur.txt\">contexte $compteur_tableau-$compteur</a></td>
		<td><a href=\"../CONTEXTES/HTML/$compteur_tableau-$compteur.html\">contexte $compteur_tableau-$compteur</a></td>
		<td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index $compteur_tableau-$compteur</a></td>
		<td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme $compteur_tableau-$compteur</a></td></tr>" >>$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 "<tr><td>$compteur</td><td>$codehttp</td><td>$encodageURL</td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a target=\"_blank\" href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n&deg;$compteur</a></td><td><a target=\"_blank\" href=\"../DUMP-TEXT/utf8_$compteur_tableau-$compteur.txt\">DUMP n&deg;$compteur</a></td><td>$compteurmotif</td>
		<td><a href=\"../CONTEXTES/utf8_$compteur_tableau-$compteur.txt\">contexte $compteur_tableau-$compteur</a></td>
		<td><a href=\"../CONTEXTES/HTML/$compteur_tableau-$compteur.html\">contexte $compteur_tableau-$compteur</a></td>
		<td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index $compteur_tableau-$compteur</a></td>
		<td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme $compteur_tableau-$compteur</a></td></tr>" >>$montableau;
	}
#fonction 6 : écriture du tableau 
ecriture_urlnonvalide ()
{
	echo "<tr><td>$compteur</td><td>$codehttp</td><td>-</td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>" >>$montableau;
}


# Programme principal
# Ecriture début du fichier HTML de sortie 
echo "<html><head><style>body {background-color: #E6E6FA;}</style><meta charset = \"UTF-8\"></head><body >" >> $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 "<table align=\"center\" border=\"5px\" bordercolor="#8A0808">" >> $montableau;
	#compteur d'URL
	compteur=1; 
	echo "<tr><th colspan=\"11\" style=\"text-align:center; color: blue;\">TABLE $compteur_tableau</th></tr>" >> $montableau;
	echo "<tr><td style=\"text-align:center; font-weight: 700;\">N° URL</td><td>CODE HTTP</td><td>Encodage</td><td style=\"text-align:center; font-weight: 700;\">URL</td><td>P.A</td><td>DUMP</td><td>CPT MOTIF</td><td>Contextes txt</td><td>Contextes html</td><td>Index</td><td>Bigrammes</td></tr>" >>$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 "<tr><td>$compteur</td><td>$codehttp</td><td>$encodageURL via detect</td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a target=\"_blank\" href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n&deg;$compteur</a></td><td><a target=\"_blank\" href=\"../DUMP-TEXT/seg_$compteur_tableau-$compteur.txt\">DUMP n&deg;$compteur</a></td><td>$compteurmotif</td>
						<td><a href=\"../CONTEXTES/$compteur_tableau-$compteur.txt\">contexte $compteur_tableau-$compteur</a></td>
						<td><a href=\"../CONTEXTES/HTML/$compteur_tableau-$compteur.html\">contexte $compteur_tableau-$compteur</a></td>
						<td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index $compteur_tableau-$compteur</a></td>
						<td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme $compteur_tableau-$compteur</a></td></tr>" >>$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 "</table>" >>$montableau;
		echo "<p><hr style=\" height: 4px; border-width:0; color: red;\"></hr></p>" >>$montableau;
		compteur_tableau=$((compteur_tableau+1));
	done
echo "</body></html>" >> $montableau;
								
								
								

Le script pour la concaténation des textes

								
#!/usr/bin/bash
for file in $(ls ./DUMP-TEXT/seg_1-*.txt);
    do echo "<partie=$file>" >> corpus_dump_zh.txt;
    cat $file >> corpus_dump_zh.txt; | tr -d ">" | tr -d "<" ;
    echo "</partie>" >> corpus_dump_zh.txt;
    done ;

for file in $(ls ./DUMP-TEXT/utf8_2-*.txt);
    do echo "<partie=$file>" >> corpus_dump_en.txt;
    cat $file >> corpus_dump_en.txt; | tr -d ">" | tr -d "<" ;
    echo "</partie>" >> corpus_dump_en.txt;
    done ;

for file in $(ls ./DUMP-TEXT/utf8_3-*.txt);
    do echo "<partie=$file>" >> corpus_dump_fr.txt;
    cat $file >> corpus_dump_fr.txt; | tr -d ">" | tr -d "<" ;
    echo "</partie>" >> corpus_dump_fr.txt;
    done ;

for file in $(ls ./CONTEXTES/1-*.txt);
    do echo "<partie=$file>" >> corpus_contexte_zh.txt;
    cat $file >> corpus_contexte_zh.txt; | tr -d ">" | tr -d "<" ;
    echo "</partie>" >> corpus_contexte_zh.txt;
    done ;

for file in $(ls ./CONTEXTES/utf8_2-*.txt);
    do echo "<partie=$file>" >> corpus_contexte_en.txt;
    cat $file >> corpus_contexte_en.txt; | tr -d ">" | tr -d "<" ;
    echo "</partie>" >> corpus_contexte_en.txt;
    done 

for file in $(ls ./CONTEXTES/utf8_3-*.txt);
    do echo "<partie=$file>" >> corpus_contexte_fr.txt;
    cat $file >> corpus_contexte_fr.txt; | tr -d ">" | tr -d "<" ;
    echo "</partie>" >> 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)