Qu'est ce que le projet Boîte de nuit ?
Le projet boîte de nuit est un projet réalisé dans le cadre du cours de Projet Encadré du Master TAL (Traitement automatique des langues) proposé par les universités Paris 3, Paris X et INALCO.
Il s'agit de mettre en oeuvre une chaîne de traitement textuel semi-automatique, depuis la récupération des données jusqu'à leur présentation (en passant par la récupération de corpus, normalisation des textes, segmentation (pour les langues concernées), extraction, structuration, présentation des résultats).
Dans notre cas nous avons choisi de porter nos analyses sur l'utilisation du terme Boîte de nuit sur internet. Nous avons donc réalisé un script bash automatisant l'extraction des pages web préalablement choisies, et la création d'un tableau regroupant toutes les données textuelles recueillies.
Vous trouverez sur ce site le travail accompli par notre groupe de 3 étudiants de l'Inalco et de Paris 3.
Dans l'onglet Réalisation vous trouverez les différentes étapes de réalisations de notre projet, en commençant par le choix du mot jusqu'aux étapes d'analyses des corpus obtenus pour chaque langue. Dans l'onglet Tableau vous trouverez un lien permettant d'accéder au tableau dans lequel figure toutes les données textuelles récoltées sur internet. L'onglet Script, lui, vous permet de regarder la version finale du script permettant la réalisation du projet. Dans l'onglet Analyse vous trouverez toutes les analyses faites à partir des résultats obtenus (nuages de mots, analyses des cooccurrences...) ainsi que la conclusion du projet. Et enfin dans l'onglet Blog vous pourrez consulter notre blog de travail, site sur lequel vous pourrez suivre les différentes étapes de l'avancement de notre projet.
Projet réalisé par:
Tristan BUHLE, Zhuang QI et Qishen WU
La première étape était une étape de réflexion dans laquelle il s'agissait de trouver un thème/mot sur lequel travailler.
Nous avons donc commencé par faire chacun de notre côté un brain-storming pour trouver des thèmes qui nous sembleraient pertinents. Une fois le brainstorming terminé nous avons mis les idées sur la table et le thème qui nous a paru le plus intéressant fut celui de la boîte de nuit !
Pourquoi ce terme et pas un autre ?
Le but de notre projet est avant tout d’analyser la façon dont est perçu un mot sur le web et de comparer les résultats selon la langue utilisée. Nous voulions donc trouver un mot qui puisse justement évoqué quelque chose de différent selon le pays dans lequel il est utilisé, ce qui nous semblais être le cas de la boîte de nuit.
Qu'est ce qu'une Boîte de nuit ? Un lieu de rassemblement nocturne pour les jeunes ? Un endroit pour passer du bon temps avec ses amis ? Un lieu pour faire de nouvelle rencontre ? Ou bien es-ce un lieu plutôt perçu comme dangereux ? Un lieu ou les jeunes se saouls ou même se droguent ? Un endroit ou se réunissent souvent des personnes mal intentionnés ?
En France, les boîtes de nuit ne semblent pas être perçues comme des lieux dangereux, du moins pas autant qu’en Chine ou qu’au Japon. Nous estimons qu’en France celles-ci sont, en règles générales, vues comme un lieu de rassemblement, de rencontre pour jeunes adultes. Alors qu’en Asie, ces lieux semblent être perçus d’une manière plus négative.
Nous avons donc fait le choix d'étudier l'usage de ce mot dans trois langues : le chinois, le français et le japonais. La culture de ces trois pays étant bien différente les unes des autres, nous avons jugés pertinent de faire nos recherches sur celles-ci.
La seconde étape était donc la recherche d'url française, japonaise et chinoise, autour du sujet de la boîte de nuit. Cette étape n'était pas sans difficultés en vue de l'actualité... Le projet boîte de nuit ayant été réalisé au cours de l’année 2019-2020, l’épidémie Covid-19 a grandement impactée nos recherches. Que ce soit les recherches en chinois, français ou en japonais, les recherches du terme boîte de nuit sur internet conduisaient infailliblement à des sites traitants de la fermeture de celles-ci en vue de l’épidémie. Il a donc fallu paramétrer notre recherche pour ne plus obtenir ce genre de résultats, qui ne seraient pas très pertinents dans le cadre de notre analyse.
Fort heureusement les filtrages de recherches internet ne sont pas très compliqués à mettre en place, quelques petites manipulations simple et le tour est joué ! Nous nous sommes donc limités aux sites antérieurs au début de l'épidémie Covid-19.
Quels types de données ?
Il fallait ensuite choisir les types de données à rechercher. Des articles de journaux sur la boite de nuit ? Des blogs ?
Nous étions parti sur l'idée de construire notre corpus à partir d'articles sur les boites de nuit, mais cette idée nous a vite paru impossible. Le nombre d'articles de journaux traitant des boîtes de nuit n'étant assez nombreux dans aucune des trois langues étudiées. De plus il serait difficile de trouver des articles 'positifs' sur les boîtes de nuit, et cela dans n’importe quelle langue. Le but étant de comparer les idées faites sur la boîte de nuit par différents pays, comparer des articles peu nombreux et tous négatifs n’auraient que peu d’intérêts…
Nous nous sommes donc rabattus sur les blogs. Les blogs, à la fois positifs et négatifs du fait que l’auteur puisse exprimer librement son opinion, nous donneraient certainement des résultats plus pertinents et satisfaisants que les articles de journaux.
Mots clés
Afin de trouver assez de sites pertinents pour étudier les opinions sur les boîtes de nuit, nous avons élargi notre recherche en recherchant d'autres mots clés que "boîte de nuit" dans la barre de recherche:
- thèmes similaires à "boîte de nuit" tels que "蹦迪", terme chinois signifiant "danser dans une boîte de nuit"
- des questions précises comme "que pensez vous des boîtes de nuit" et "opinion sur les boîtes de nuit" pour orienter notre recherche sur les résultats souhaités.
La troisième étape consistait à créer le script principale. La création du script de façon détaillée est disponible sur le blog de travail évoqué précédemment, accessible via l'onglet Blog. Quant à la version finale du script, vous la trouverez dans l'onglet Script. Nous évoquerons ici les grandes étapes de sa création.
Concrètement, que doit faire le script ?
Le script a plusieurs fonctionnalités. Sa première fonctionnalité est de récupérer les données textuelles à l'intérieur d'url, préalablement disposées dans un fichier texte. En effectuant cette récupération, il regarde l'encodage utilisé par chacun des sites. Le but étant de récolter des données textuelles encodées en UTF-8, si les données ne sont pas encodées en UTF-8, le script tentera de les convertir. Une fois les données récupérées, et dans le bon encodage, il va y chercher plusieurs informations :
Ces différents traitements évidemment réalisés pour chaque langue (donc le français, chinois et le japonais). Ainsi il faut également prévoir une étape de segmentation pour les langues chinoise et japonaise, qui ne sont pas segmentées. Cette étape de segmentation est disponible sur le blog de travail.
La dernière étape (si on ne considère pas la création de ce site comme une étape) était donc d'analyser les données récoltées, puis de comparer les résultats avec nos attentes initiales. La partie analyse peut être découpée en deux parties : La conception des nuages de mots et la partie iTrameur (application permettant de faire une analyse textométrique de nos résultats).
Toutes ces analyses sont disponibles dans la partie analyse.
#!/usr/bin/bash
# mode d'emploi:
#1. On se place dans le dossier PROJET-MOT-SUR-LE-WEB
#2. on lance le progamme avec la commande:
#bash [chemin du script actuel] [INPUT] [OUTPUT] [MOTIF]
#---------------------------------
#INPUT: le dossier d'URLS
#OUTPUT: le chemin d'un tableau html
#MOTIF: format à trouver dans le texte/mis entre ""
#exemple:
# bash ./PROGRAMMES/projet_wu.sh ./URLS ./TABLEAUX/tableau.html "酒吧|夜店|蹦迪|夜场|ナイトクラブ|クラブ|bo(i|î)tes?( de nuit)?"
# pas d'espace autour du "="
#---------------------------------------------------------------------------
# on récupère les arguments du programme et on les stocke dans des variables
dossier_URL=$1;
mon_tableau=$2;
motif=$3;
#------------------------------------------------------------------------
# écrire le début du fichier HTML et le sauvegarde dans un tableau
echo "<html><head><title>TABLEAU URL : 酒吧|夜店|蹦迪|夜场|ナイトクラブ|クラブ|bo(i|î)tes?( de nuit)?</title><meta charset=\"utf-8\"/></head><body>" > $mon_tableau;
# on crée un variable pour compter les fichiers d'URL et des tableaux associés
compteur_tableau=1;
# parcours des fichiers d'urls contenus dans le dossiers URLS avec boucle %for%
for fichier in $(ls $dossier_URL)
do
echo $fichier;
echo "<table align=\"center\" border=\"10px\" bordercolor==\"90F1EF\">" >> $mon_tableau;
compteur=1; # compteur d'URL
echo "<tr><th colspan=\"11\" align=\"center\" bgcolor:black;\><b>Tableau n° $compteur_tableau</b></th></tr>" >> $mon_tableau;
echo "<tr><th colspan=\"11\" align=\"center\" bgcolor:black;\><b>MOTIF : $motif</b></th></tr>" >> $mon_tableau;
echo "<tr><td>CPT</td><td>HTTP</td><td>Encodage</td><td>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>" >> $mon_tableau;
# puis lire ligne à ligne le fichier d'URL
while read ligne
do
echo "--------------------------------------------------------------------------" ;
echo "TRAITEMENT DE URL $compteur_tableau-$compteur:$ligne";
# lire les lignes de l'un des fichiers d'URL, puis le sauvegarde dans html
# ensuite créer une varaible qui va récupérer la valeur http_code (avec curl -w)
codeHTTP=$(curl -L -o ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html $ligne -w %{http_code});
#-----------------------------------------------------------------------------------------------
# tester la valeur de codeHTTP
if [[ $codeHTTP == 200 ]]
then
echo "code HTTP ok"
encodage_URL=$(curl -I $ligne | egrep -i "charset=" | cut -f2 -d= | tr [a-z] [A-Z] | tr -d "\r|\"");
echo "encodage initial: <$encodage_URL>";
if [[ $encodage_URL == "UTF-8" ]]
then
echo "encodage UTF-8 ok ----------------------------------"
echo "<$compteur_tableau><$compteur><$ligne><$codeHTTP><$encodage_URL>";
lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt;
if [[ $fichier == "list_URL_BDN_CN.txt" ]]
then
echo $fichier;
bash ./PROGRAMMES/stanford-segmenter/segment.sh -k ctb ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt "UTF-8" "0" > ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt;
egrep -C 2 -i "$motif" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
compteur_motif=$(egrep -o -i "$motif" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | wc -l);
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrep/motif2020.txt;
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
egrep -i -o "\w+" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt;
tr " " "\n" < ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > chi1.txt;
tail -n +2 chi1.txt > chi2.txt;
paste chi1.txt chi2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt;
elif [[ $fichier == "urljapon.txt" ]]
then
python3 ./PROGRAMMES/tokenizer-jp.py ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt
cat token.txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ;
tail -n +2 token.txt > token2.txt;
paste token.txt token2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ;
egrep -C 2 -i "$motif" token.txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
# 2. donner à voir ces contextes au format HTML
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" token.txt ./PROGRAMMES/minigrep/motif2020.txt ;
# attention il faut "sauvegarder" le résultat
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
#renommer le token pour l'insérer dans le tableau
#et le truc du bas il faut le mettre dans le else aussi
compteur_motif=$(egrep -o -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
else
compteur_motif=$(egrep -o -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrep/motif2020.txt;
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
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 ;
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;
fi
#-------------------------------------
# écrire les résultats dans le tableau final :
echo "<tr><td>$compteur</td><td><span style=\"background-color:green\">$codeHTTP</span></td><td><span style=\"background-color:green\">$encodage_URL</span></td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n°$compteur</a></td><td><a href=\"../DUMP-TEXT/utf8_$compteur_tableau-$compteur.txt\">DUMP n°$compteur</a></td><td>$compteur_motif</td><td><a href=\"../CONTEXTES/utf8_$compteur_tableau-$compteur.txt\">contexte $compteur</a></td><td><a href=\"../CONTEXTES/$compteur_tableau-$compteur.html\">contexte $compteur</a></td><td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index $compteur</a></td><td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme $compteur</a></td></tr>" >> $mon_tableau;
#--------------------------------------------------------------------------------------------------------------------
else
echo "<$compteur_tableau><$compteur><$ligne><$codeHTTP><$encodage_URL>";
if [[ $encodage_URL != "" ]]
then
echo "encodage non UTF-8 ----------------------------------"
return_iconv=$(iconv -l | egrep "$encodage_URL");
if [[ $return_iconv != "" ]]
then
echo -e "ENCODAGE initial <$encodage_URL> OK, connu de iconv : on passe au traitement \n";
curl -sL -o ./PAGES-ASPIREES/$compteur_tableau-$compteur.html $ligne;
lynx -dump -nolist -assume_charset="$encodage_URL" -display_charset="$encodage_URL" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/$compteur_tableau-$compteur.txt;
iconv -f $encodage_URL -t UTF-8 ./DUMP-TEXT/$compteur_tableau-$compteur.txt > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt;
if [[ $fichier == "list_URL_BDN_CN.txt" ]]
then
echo $fichier;
bash ./PROGRAMMES/stanford-segmenter/segment.sh -k ctb ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt "UTF-8" "0" > ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt;
egrep -C 2 -i "$motif" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
compteur_motif=$(egrep -o -i "$motif" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | wc -l);
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrep/motif2020.txt;
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
egrep -i -o "\w+" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt;
tr " " "\n" < ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > chi1.txt;
tail -n +2 chi1.txt > chi2.txt;
paste chi1.txt chi2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt;
elif [[ $fichier == "urljapon.txt" ]]
then
python3 ./PROGRAMMES/tokenizer-jp.py ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt
cat token.txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ;
tail -n +2 token.txt > token2.txt;
paste token.txt token2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ;
egrep -C 2 -i "$motif" token.txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
# 2. donner à voir ces contextes au format HTML
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" token.txt ./PROGRAMMES/minigrep/motif2020.txt ;
# attention il faut "sauvegarder" le résultat
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
#renommer le token pour l'insérer dans le tableau
#et le truc du bas il faut le mettre dans le else aussi
compteur_motif=$(egrep -o -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
else
compteur_motif=$(egrep -o -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrep/motif2020.txt;
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
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 ;
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;
fi
echo "<tr><td>$compteur</td><td><span style=\"background-color:green\">$codeHTTP</span></td><td><span style=\"background-color:yellow\">$encodage_URL</span></td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n°$compteur</a></td><td><a href=\"../DUMP-TEXT/utf8_$compteur_tableau-$compteur.txt\">DUMP n°$compteur</a></td><td>$compteur_motif</td><td><a href=\"../CONTEXTES/utf8_$compteur_tableau-$compteur.txt\">contexte $compteur</a></td><td><a href=\"../CONTEXTES/$compteur_tableau-$compteur.html\">contexte $compteur</a></td><td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index $compteur</a></td><td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme $compteur</a></td></tr>" >> $mon_tableau;
else
echo -e "encodage initial <$encodage> inconnu \n";
echo "<tr><td>$compteur</td><td><span style=\"background-color:green\">$codeHTTP</span></td><td><span style=\"background-color:red\">$encodage_URL</span></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>" >> $mon_tableau;
fi
else
#l'encodage est vide, on applique la commande uchardet sur la page aspirée
echo "!Encodage initial vide =>Extraction d'encodage----------------------"
encodageExtrait=$(uchardet ./PAGES-ASPIREES/$compteur_tableau-$compteur.html | cut -f2 -d=);
echo -e "encodage extrait : $encodageExtrait"
reponse=$(iconv -l | egrep "$encodageExtrait");
if [[ $reponse != "" ]]
then
echo -e "ENCODAGE extrait <$encodageExtrait> OK, connu de iconv : on passe au traitement \n";
curl -sL -o ./PAGES-ASPIREES/$compteur_tableau-$compteur.html $ligne;
lynx --assume-charset="$encodageExtrait" --display_charset="$encodageExtrait" -dump -nolist $ligne > ./DUMP-TEXT/$compteur_tableau-$compteur.txt ;
iconv -f $encodageExtrait -t UTF-8 ./DUMP-TEXT/$compteur_tableau-$compteur.txt > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt;
if [[ $fichier == "list_URL_BDN_CN.txt" ]]
then
bash ./PROGRAMMES/stanford-segmenter/segment.sh -k ctb ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt "UTF-8" "0" > ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt;
egrep -C 2 -i "$motif" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
compteur_motif=$(egrep -o -i "$motif" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | wc -l);
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrep/motif2020.txt;
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
egrep -i -o "\w+" ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt;
tr " " "\n" < ./SEGMENT/chinois_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > chi1.txt;
tail -n +2 chi1.txt > chi2.txt;
paste chi1.txt chi2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt;
elif [[ $fichier == "urljapon.txt" ]]
then
python3 ./PROGRAMMES/tokenizer-jp.py ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt
cat token.txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ;
tail -n +2 token.txt > token2.txt;
paste token.txt token2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ;
egrep -C 2 -i "$motif" token.txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
# 2. donner à voir ces contextes au format HTML
perl ./PROGRAMMES/minigre/minigrepmultilingue.pl "UTF-8" token.txt ./PROGRAMMES/minigrep/motif2020.txt ;
# attention il faut "sauvegarder" le résultat
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
#renommer le token pour l'insérer dans le tableau
#et le truc du bas il faut le mettre dans le else aussi
compteur_motif=$(egrep -o -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
else
compteur_motif=$(egrep -o -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt;
perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrep/motif2020.txt;
mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
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 ;
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;
fi
echo "<tr><td>$compteur</td><td><span style=\"background-color:green\">$codeHTTP</span></td><td><span style=\"background-color:yellow\">$encodageExtrait</span></td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n°$compteur</a></td><td><a href=\"../DUMP-TEXT/utf8_$compteur_tableau-$compteur.txt\">DUMP n°$compteur</a></td><td>$compteur_motif</td><td><a href=\"../CONTEXTES/utf8_$compteur_tableau-$compteur.txt\">contexte $compteur</a></td><td><a href=\"../CONTEXTES/$compteur_tableau-$compteur.html\">contexte $compteur</a></td><td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index $compteur</a></td><td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme $compteur</a></td></tr>" >> $mon_tableau;
else
echo -e "encodage extrait <$encodageExtrait> inconnu \n";
echo -e "pas de traitement"
echo "<tr><td>$compteur</td><td><span style=\"background-color:green\">$codeHTTP</span></td><td><span style=\"background-color:red\">-</span></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>" >> $mon_tableau;
fi
fi
fi
else
echo "PB HTTP ----------------------------------"
echo "<$compteur_tableau><$compteur><$ligne><$codeHTTP>";
echo "<tr><td>$compteur</td><td><span style=\"background-color:red\">$codeHTTP</span></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>" >> $mon_tableau;
fi
compteur=$((compteur+1));
done < $dossier_URL/$fichier
echo "</table>" >> $mon_tableau;
echo "<p><hr color=\"blue\"></p>" >> $mon_tableau;
compteur_tableau=$((compteur_tableau+1));
done
echo "</body></html>" >> $mon_tableau;
Comme brièvement évoqué dans l'onglet Réalisation, si nous avons choisi ce thème c'est parce que nous estimons que la boite de nuit semble être un lieu perçu de manières différentes à travers le monde. En France, celle-ci ne semble pas être perçue comme un lieu négatif, bien qu'elle ne soit pas non plus un endroit jugé comme totalement sûr, la vision de la boite de nuit semble globalement positive. En Chine et au Japon cependant, nous estimons que ce n'est pas le cas et que la boîte de nuit est un lieu perçu plus négativement qu'en France. Nos attentes sont donc d'obtenir un plus grand nombre de termes péjoratifs en provenance des analyses provenants des sites japonais et chinois que dans celles des résultats français.
Nous allons maintenant passer à la partie analyse, qui consistait donc à faire une analyse textométrique des résultats obtenues notamment grâce à iTrameur. Nous commenceront par étudier des nuages de mots créer à partir de nos corpus (un nuage de mot minimum par langue), ensuite, grâce à iTrameur, nous étudieront les coocurrences du terme boite de nuit dans nos corpus ainsi que les mots les plus présents dans le corpus. Au final nous regrouperont toutes les informations obtenues pour essayé d'en resortir une conclusion.
Les nuages de mots
Nous allons donc commencer par étudier les nuages de mots obtenus à l'aide des fichiers dump et des fichier contextes. Et de l'outil de création de nuages de mots "Wordart"
Nuage de mots (contextes)
Voici donc le nuage de mots du corpus réunissant tous les fichier contextes.
En Japonais, comme dans la plus part des langues d'ailleurs on aura tendance à avoir dans ce genre de nuage de mots une abondance de particules, pronoms etc, je précise donc que ce nuage de mots à déjà été filtré pour ne laisser apparaître que (ou du moins majoritairement) les mots jugés pertinents.
Quels sont donc les mots les plus fréquents dans le corpus ?
Voici donc les mots qui ressortent le plus dans le corpus japonais. En première place le terme Boite de nuit, sans surprise puisqu'il s'agit d'un corpus de contexte tournant autour de ce même terme. On remarque par ailleurs que celui-ci ressort également en quatrième place de notre nuage de mots, cette répétition est due à la traduction de ce mot qui en japonais peut être réalisée de deux façons différentes : soit ナイトクラブ (mot emprunté de l'anglais night club), soit クラブ (diminutif de night club 'club')
En deuxième place on retrouve le mot Dj, inutile de traduire ce mot la, il est employé de la même façon en français qu'en japonais.
Ensuite on retrouve les mots : Musique, populaire, japon, recommandé, danse... Essentiellement des mots positifs.
Voyons maintenant du côté du corpus créé à partir des fichiers dumps.
Nuage de mots (dumps)
Ici aussi le nuage de mots a été traité au préalable pour supprimer toutes les occurrences jugées inutiles dans notre analyse comme les pronoms, particules etc...
Voyons maintenant quels sont les mots les plus fréquents dans l'intégralité du corpus japonais.
Étudions les résultats de ce nuage de mots.
Tout d'abord on peut remarquer une large supériorité du terme クラブ par rapport à l'autre terme qui n'est pratiquement plus visible. Cette supériorité était déjà présente dans le nuage de mots précédent mais encore plus notable dans celui-ci. On remarque aussi que les mots les plus fréquents semblent aussi être assez similaires à ceux du premier nuage.
En assemblant les résultats de nos deux nuages de mots, on remarque que les mots les plus fréquents du corpus sont les mots boite de nuit et Dj suivi de près par Recommandé, Japon, Musique... La première vision obtenue grâce à ces nuages de mots serait donc que la boite de nuit est plutôt vue de façon positive, comme un lieu populaire pour allé danser et non comme un lieu à risque potentiel.
Poursuivons notre analyse du corpus japonais avec cette fois des analyses textométriques des deux corpus
Analyse textométrique iTrameur
iTrameur est une application en ligne de l'Université Sorbonne Nouvelle - Paris 3, permettant de réaliser des calculs lexicométriques sur un corpus donné. On peut grâce à celle-ci réaliser des comptages de cooccurrences de termes autour d'un motif, analyser l'évolution de vocabulaire du corpus, visualiser l'alignement de corpus parallèles, ou encore d'autres options tel que l'étiquetage à l'aide de treetagger. Précisons que dans le cadre de notre projet, nous ne nous servirons que d'une partie de l'ensemble des fonctionnalités de cette application.
Commençons par une analyse des cooccurrents de notre thème dans le corpus créé à partir du contexte.
Du à une trop forte densité de mots dans les cooccurrents du dump, nous ne regarderont que les cooccurrents du corpus créé à partir des contextes, s'agissant de regarder les cooccurrents, les résultats du fichier dump ne semblent pas être ici primordiaux.
Cooccurrences boite de nuit (クラブ)
Ci-dessus le schéma des cooccurrences du mot "クラブ", obtenus à l'aide de l'application iTrameur.
Cooccurrences boite de nuit (ナイトクラブ)
Ci-dessus le schéma des cooccurrences du mot "ナイトクラブ", obtenu à l'aide de l'application iTrameur.
Analysons maintenant les résultats obtenues.
Il n'est pas ici question de regarder chaque mot cooccurrent un à un et de les analyser, mais plutôt de regarder dans l'ensemble les types de mots retrouvés et d'essayé d'en dégager une conclusion. Comme on pourrait s'y attendre de part sa supériorité numérique dans le corpus, on remarque que le nombre de cooccurrences pour le mot クラブ et bien supérieur à celui du mot ナイトクラブ. Il ne sera évidemment pas ici question de comparer les résultats pour ces deux termes puisqu'il s'agit du même mot en français et que notre but est de comparer l'image de ce terme selon le pays dans lequel il est employé.
Voici donc certains mots cooccurrents :
Culture / Évènement / Adorer / Jeune fille / Amuser / Nouveau (pas d'équivalent exact en français mais signifiant la première fois dans un lieu) / Musique...
Des mots que l'on pourrait donc qualifier de positifs, ou neutres. Mais on retrouve aussi certains mots comme Dangereux ou Sureté bien que inférieur numériquement par rapport aux autres termes.
Ces résultats viennent donc conforter l'idée que les boites de nuit, au Japon, soient plutôt vues comme des lieux agréables et amusant. Cependant les mots "dangereux" et "sureté" apparaissent tout de même, laissant supposer que celles-ci ne soient pas non plus vue comme des endroits complètement sûrs.
Regardons à présent ce mot dans des phrases contextes
Phrases contexte ナイトクラブ (corpus contexte)
Voici donc un exemple de phrases contextes faisant usage de boite de nuit. On remarque en premier lieu que ces phrases proviennent de deux sites différents (correspondants aux urls 10 et 11 d'après la colonne Partie). Les quatre premières phrases venant d'un site et les six dernières de l'autre. Après lecture de ces phrases on remarque que les quatre premières sont toutes plus ou moins des recommandations de boite de nuits. On remarque d'ailleurs la répétition du contexte droit trois fois, cette partie pouvant se traduire approximativement par : "La boite de nuit ... serait-elle au centre de l'activité de la région ? ". Quant aux six autres phrases elles semblent associer la Boite de nuit aux discothèques en qualifiant la boite de nuit comme "seconde discothèque", "nouvelle sorte de discothèque".
Les nuages de mots
Tout d’abord, nous allons voir ensemble les nuages de mots français obtenus à l’aide des fichiers dump et des fichiers contextes. Les mots inutiles ont été préalablement exclus. Boîte et boite sont considérés comme le même mot car il n'y a pas d’intérêt à différencier les deux formes orthographiques.
Nuage de mots (contextes)
Les 10 mots les plus fréquents dans le corpus français(contexte):
Nuage de mots (dump)
Les 10 mots les plus fréquents dans le corpus français(dump):
La liste est tout à fait pareille pour les deux corpus sauf une petite différence sur l’ordre.
« Boîte » et « nuit » sont deux mots qui vont généralement ensemble. Ils s’affichent en haut de la liste, ce qui prouve la pertinence du corpus collecté par rapport au thème étudié.
Il y a deux mots qui sont liés au sexe : fille et mec. Cela signifie qu’il y a beaucoup de discussions autour du sexe sous le thème de « boîte de nuit ». Voici quelques contextes possibles pour ces mots :
Positif :
Négatif :
Le mot « seul » montre les attentions portées sur la sortie seule en boîte : souci de sécurité ?
« Ami », « party » et « soirée » sont des termes positifs.
Le mot « ans » représente les discussions relatives à l’âge.
Le mot « jamais » est un adverbe. Mais on le garde dans la liste en tant qu’un mot « utile » car il peut être combiné avec d’autres termes dans la liste pour composer un terme significatif. Par exemple, jamais (dans les) boîtes, jamais seul, etc.
A part les mots ressortant le plus, il y a d’autres mots intéressants dans le nuage de mots :
Positifs : super, rire, cool, fête, rencontre, belle, joli, plaisir, etc…
Négatif : draguer, peur, merde, l’alcool, erreur, chier, videur, risque, etc…
En résumé, le nuage de mots représente un mélange de termes positifs et négatifs. Il faut examiner les termes dans le contexte pour comprendre mieux leur signification.
Analyse textométrique iTrameur
Avant de passer à l’analyse, il faut d’abord résoudre un problème : le mot « boîte » est présent sous différentes formes dues à la variation du nombre ou à des fautes d’orthographe et chaque forme est considérée comme un mot indépendant par iTrameur. Face à ce problème, nous avons manuellement transformé tous les « boîtes » « boites » ou « boite » dans le corpus en « boîte » afin de simplifier l’analyse. Quant à la forme avec « B » en majuscule, nous l’avons ignorée car celle-ci est très peu nombreuse.
Ci-dessous le schéma des cooccurrents du mot « boîte » (30 termes à gauche et à droite et pareil ci-après). Une stop-liste est appliquée pour éliminer les termes inutiles.
Schéma de cooccurrences du mot « boîte »
Parmi les mots qui représentent éventuellement une appréciation, on en trouve 3 catégories :
Regardons maintenant le schéma de cooccurrences des mots dans la rubrique « à voir dans le contexte » :
Schéma de cooccurrences - « FIlles »
Schéma de cooccurrences - « chrétien »
Schéma de cooccurrences - « tentez »
Schéma de cooccurrences - « secrètement »
« FIlles » et « tentez » n’ont pas de cooccurrents qui expriment une opinion. Par contre, les mots « chrétien » et « secrètement » ont tous les deux un cooccurrent qui représente une opinion négative : « péché » et « détestez ».
En résumé, l’analyse de cooccurrences du mot « boîte » montre que les opinions sur la boîte de nuit sont généralement négatives.
Maintenant, reprenons les hypothèses à vérifier faites lors de l’analyse des nuages de mots.
1. Quel est le contexte du mot « fille » ?
Schéma de cooccurrences - « fille »
Les mots qui ressortent dans ce schéma sont « louche », « mauvaise », « affaiblie » qui sont tous péjoratifs. Si on regarde le contexte d’utilisation de ces termes :
Contexte du cooccurrent « mauvaise »
Contexte du cooccurrent « louche »
Contexte du cooccurrent « affaiblie »
Même si la portée de ces termes dans le corpus est si petite qu’elles est limitée à une ou deux phrases, le contexte de ces termes montre à un certain point que le mot « fille » est plutôt lié à un préjugé.
2. « seul » est lié au doute de sécurité ? => faux
Dans la concordance de « seul », il n’y a aucune mention des mots « sécure » ou « dangereux » ni de leurs dérivés.
3. « ans » : des préjugés concernant l’âge ?
Schéma de cooccurrence - « ans »
Il affiche des chiffres dans le schéma. Cependant, si on regarde le contexte de ces chiffres, on trouvera plutôt des thèmes non pertinents.
4. Le contexte du mot « jamais »
Schéma de cooccurrences - « jamais »
Le mot « pieds » est au fond le plus foncé. Après avoir vu son contexte, nous allons voir plusieurs affirmations de « jamais mettre les pieds dans une boîte ». Il s’agit donc d'une appréciation négative.
Contexte du cooccurrent « pieds »
Conclusion
En conclusion, malgré un petit mélange d’opinions, la majorité des opinions sur les boîtes de nuit des francophones sont négatives. Ce résultat renverse notre hypothèse de départ que la vision de la boîte de nuit en France semble globalement positive.
词云
Les nuages de mots
En chinois, le mot boite de nuit existe dans une variété d'expressions, généralement les plus communément utilisées sont 酒吧、夜店、夜场、蹦迪,donc dans notre motif nous utilisons ces quatre mots.
Examinons d'abord le nuage de mots, obtenu à l'aide du logiciel:"WordArt"
Nuage de mots (dump)
Les mots les plus fréquents (mise à part les mots synonymes de boîtes de nuit) sont les suivants :
Nuage de mots (contexte)
Les mots les plus fréquents (mise à part les mots synonymes de boîtes de nuit) sont les suivants :
Tout d'abord, en comparant les deux nuages de mots, nous pouvons constater que le mot le plus utilisé en chinois pour désigner la boite de nuit est 酒吧, suivi de 蹦迪、夜场 et 夜店, et parfois aussi 夜总会.
Deuxièmement, nous pouvons constater qu'en plus des synonymes de "boîte de nuit", les mots qui apparaissent le plus souvent dans "dump" et "contexte" sont "朋友amis", "女生filles", "音乐musique" et "喝酒boire d‘alcool". D'après cette analyse du contexte chinois la "boite de nuit" semble surtout considéré comme un lieu de rencontre, un lieu pour boire entre amis, et un lieu souvent associé aux femmes et à la musique. Si l'on examine certains des mots les plus fréquents dans leur contextes, on constate que la boîte de nuit est un lieu populaire et qu'outre l’alcool, il est aussi étroitement lié au travail, au divertissement et à la consommation.
iTrameur
Par conséquent, nous combinerons les fonctions d'iTrameur pour effectuer une analyse contextuelle plus détaillée de la boite de nuit en chinois
Et voici donc le graphique des cooccurrences correspondant à des mots chinois.
酒吧
夜店
夜场
蹦迪
Nous allons analyser les quatre diagrammes dans leur ensemble, car bien que les mots chinois soient écrits différemment, ils signifient tous "boîte de nuit", donc nous les analyserons ensemble, et dans notre analyse nous allons écarter certains mots qui n'ont pas de signification réelle en chinois, comme 在(dans), 是(est), etc. Dans le contexte chinois, les mots qui apparaissent le plus souvent avec boîte de nuit sont des mots relativement négatifs, tels que 敏感(sensible), 妖魔化(diabolisé), et le problème des mineurs qui vont en boîte de nuit, mais la plupart de ces mots négatifs sont axés sur l'avis sur les boîtes de nuit, et les mots plus négatifs comme 坏人(personnes malintentionnées), 危险(dangereux), n'apparaissent pas très souvent, voir pas du tout. Les autres mots qui apparaissent plus souvent sont des mots positifs, comme par exemple, 喜欢(aimer)想去(vouloir y aller), etc. On constate qu'en Chine, les gens auraient tendance à aller dans les boîtes de nuit pour se libérer.
Conclusion
En combinant l'analyse du nuage de mots précédent et l'analyse basé sur iTrameur, nous pouvons provisoirement établir un contexte pour l'utilisation du terme "夜店boîte de nuit" dans le contexte culturel chinois : Bien qu'il existe encore quelques perceptions négatives des boîtes de nuit dans la société chinoise, elles sont toujours un endroit où le public aime aller pour se faire des amis du sexe opposé et profiter de la musique et de l'alcool pour se libérer.
Le mot "boîte de nuit" semble effectivement être un mot interprété de manière différentes à travers le monde. Cependant si notre hypothèse de départ prévoyait une vision plus négative de la boîte de nuit en Chine et au Japon et une vision plus positive en France, nos analyse nous indique tout le contraire. En effet il semblerait que la boîte de nuit soit essentiellement vue positivement au Japon et en Chine, avec seulement quelques allusions à des termes négatifs. Et en France au contraire celle-ci semble être essentiellement décrite comme un lieu associé à de nombreux préjugés négatifs, harcèlement, avec l'apparition de nombreux termes négatifs.