Lingunix

Les outils unix appliqués à la recherche linguistique et psycholinguistique

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille
Représentations Sociales

Algorithme d'extraction de Représentations sociales dans un document

Imprimer PDF

 

I. EXTRAIRE CHAQUE MOT DU TEXTE DANS UN DICTIONNAIRE TRIÉ ET ORDONNÉ :

I.1) Remplacer les espaces par des retour-chariots
I.2) Conserver uniquement les chaînes de caractères qui sont des mots
I.3) Laisser passer seulement les lignes qui commencent et qui se terminent par une lettre
I.4) Trier les mots par ordre alphabétique
I.5) Supprimer les doublons de mots
I.6) Écrire le résultat dans le fichier dictionnaire.txt

 

II. COUPLER LES MOTS DU DICTIONNAIRE DEUX À DEUX :

II.1) Lire chaque ligne du fichier dictionnaire.txt, et faire : pour chaque ligne du fichier dictionnaire.txt écrire chaque ligne du fichier dictionnaire.txt.
II.2) Écrire le résultat dans le fichier dictionnaire_couples.txt

 

III. CALCUL DE LA FRÉQUENCE D'OCCURENCE DE CHAQUE COUPLE DE MOTS :

III.1) Remplacer chaque caractère espace par ###, et ajouter un retour chariot après chaque caractère de ponctuation terminant une phrase (.!?: ;) afin de faciliter le traitement. Écrire ce résultat dans le fichier texte1.txt
III.2) Lire chaque ligne du fichier dictionnaire_couples.txt, (correspondant à un couple de mots)
III.3) Écrire chaque ligne du fichier dictionnaire_couples.txt, (correspondant à un couple de mots)
III.4) Calculer la fréquence d'occurrence de chaque couple de mots dans le texte.txt (sur lequel on travail) et écrire le résultat à cotés du couple de mots correspondant.
III.5) Ignorer les couples de mots ayant une fréquence d'occurrence égale à zero.
III.6) Ordonner de manière décroissante les couples de mots en fonction de leurs fréquences d'occurrence.
III.7) Ordonner, au sein de chaque classe d'ordres de fréquences, les couples de mots de manière alphabétique.


 

I. EXTRAIRE CHAQUE MOT DU TEXTE DANS UN DICTIONNAIRE TRIÉ ET ORDONNÉ :


grep . texte.txt | sed "s/\ /\n/g" | sed "s/'/\n/g" | sed 's/\W//g' | grep '^[a-z]' | grep '[a-z]$' | sort | uniq > dictionnaire.txt

II. COUPLER LES MOTS DU DICTIONNAIRE DEUX À DEUX :


for i in `grep . dictionnaire.txt`; do for j in `grep . dictionnaire.txt`; do echo "$i $j" >> dictionnaire_couples.txt

III. CALCUL DE LA FRÉQUENCE D'OCCURENCE DE CHAQUE COUPLE DE MOTS :


grep . texte.txt | sed -e 's/\ /###/g; s/\n/###/g; s/\./\.\n/g; s/\!/\!\n/g; s/\?/\?\n/g; s/\:/\:\n/g; s/\;/\;\n/g' > texte1.txt;

for i in `awk '{print $0}' dictionnaire_couples.txt | sed -e "s/\ /###/g"`; do echo "$i:`grep $i -c texte1.txt`"; done | grep :0$ -v | sed -e 's/###/\ /g' | sort -t: -k2nr,2nr >RESULTAT.txt


COMPLÉMENTS et OPTIMISATION:


Il est possible d'optimiser cet algorithme en faisant un traitement préliminaire au texte.txt sur lequel nous travaillons :
_ nous pouvons retirer les « petits mots » du texte, comme par exemple les conjonctions de coordinations, de subordinations, les pronoms, les articles, etc ...

SCRIPT :

grep . texte.txt | sed -e 's/\ le\ /\ /g; s/\ la\ /\ /g; s/\ les\ /\ /g; s/\ un\ /\ /g; s/\ une\ /\ /g; s/\ du\ /\ /g; s/\ des\ /\ /g; s/\ mais\ /\ /g; s/\ ou\ /\ /g; s/\ est\ /\ /g; s/\ donc\ /\ /g; s/\ or\ /\ /g; s/\ ni\ /\ /g; s/\ car\ /\ /g; s/\ à\ /\ /g; s/\ dans\ /\ /g; s/\ et\ /\ /g; s/\ par\ /\ /g; s/\ y\ /\ /g; s/\ pour\ /\ /g; s/\ en\ /\ /g; s/\ vers\ /\ /g; s/\ avec\ /\ /g; s/\ de\ /\ /g; s/\ sans\ /\ /g; s/\ sous\ /\ /g; s/\ je\ /\ /g; s/\ tu\ /\ /g; s/\ il\ /\ /g; s/\ elle\ /\ /g; s/\ nous\ /\ /g; s/\ vous\ /\ /g; s/\ ils\ /\ /g; s/\ elles\ /\ /g; s/\ on\ /\ /g; s/\ mon\ /\ /g; s/\ ma\ /\ /g; s/\ son\ /\ /g; s/\ mien\ /\ /g; s/\ miènne\ /\ /g; s/\ leur\ /\ /g; s/\ leurs\ /\ /g; s/\ eux\ /\ /g; s/\ ce\ /\ /g; s/\ ça\ /\ /g; s/\ ces\ /\ /g; s/\ se\ /\ /g; s/\ sa\ /\ /g; s/\ ses\ /\ /g; s/\ qui\ /\ /g; s/\ que\ /\ /g; s/\ quoi\ /\ /g; s/\ quand\ /\ /g; s/\ ne\ //g; s/\ me\ //g; s/\ qu\ //g; s/\ cette\ //g; s/\ cet\b //g;s/\ si\ //g; s/\ quel\ //g; s/\ sur\ //g' > votre_nouveau_texte.txt;

-> cette ligne est à exécuter en premier avant tout autre traitement, après il sera nécessaire de renommer votre fichier votre_nouveau_texte.txt en texte.txt.

 

Version améliorée avec une interface graphique Zenity permettant le choix d'un fichier texte :

copiez et collez le code source suivant dans votre éditeur de texte préféré et enregistrez-le au format .sh

#!/bin/bash

#BOITE DE DIALOGUE
file=`zenity  --file-selection --title "Choisissez votre fichier texte"   --text  "Choisissez votre fichier texte"`;
fichier=$file;
#grep . $fichier

#I liste tous les mots de votre texte dans une colonne


echo "listage des mots du texte puis exclusion des petits mots";

grep . $fichier | sed "s/\ /\n/g" | sed "s/'/\n/g" | sed 's/\W//g' | grep '^[a-z]' | grep '[a-z]$' | sort | uniq | grep -iv ^'\(le\|la\|les\|un\|une\|du\|des\|mais\|ou\|est\|donc\|or\|ni\|car\|à\|dans\|et\|par\|y\|pour\|en\|vers\|avec\|de\|sans\|sous\|je\|tu\|il\|elle\|nous\|vous\|ils\|elles\|lui\|on\|mon\|ma\|son\|mien\|miènne\|leur\|leurs\|eux\|ce\|cet\|cette\|ça\|ces\|se\|sa\|ses\|qui\|que\|quoi\|quand\|quel\|lequel\|lesquels\|laquelle\|dont\|aux\|au\|ne\|si\|sur\|a\|z\|e\|r\|t\|y\|u\|i\|o\|p\|q\|s\|d\|f\|g\|h\|j\|k\|l\|m\|w\|x\|c\|v\|b\|n\)'$ >> $HOME/tmp_RS_1.txt;

#II génération du couplage de chaque mot de la liste par association


echo "association de chaque mot par deux";
for i in `grep . $HOME/tmp_RS_1.txt`; do for j in `grep . $HOME/tmp_RS_1.txt`; do echo "$i $j" >> $HOME/dictionnaire_mots-couples.txt; done; done

#efface $HOME/tmp_RS_1.txt

echo "efface $HOME/tmp_RS_1.txt";
rm $HOME/tmp_RS_1.txt;

#III calcul de fréquence d'association de mots


echo "calcul de fréquence de mots couplés dans le texte";

grep . $fichier | sed -e 's/\ le\ /\ /g; s/\ la\ /\ /g; s/\ les\ /\ /g; s/\ un\ /\ /g; s/\ une\ /\ /g; s/\ du\ /\ /g; s/\ des\ /\ /g; s/\ mais\ /\ /g; s/\ ou\ /\ /g; s/\ est\ /\ /g; s/\ donc\ /\ /g; s/\ or\ /\ /g; s/\ ni\ /\ /g; s/\ car\ /\ /g; s/\ à\ /\ /g; s/\ dans\ /\ /g; s/\ et\ /\ /g; s/\ par\ /\ /g; s/\ y\ /\ /g; s/\ pour\ /\ /g; s/\ en\ /\ /g; s/\ vers\ /\ /g; s/\ avec\ /\ /g; s/\ de\ /\ /g; s/\ sans\ /\ /g; s/\ sous\ /\ /g; s/\ je\ /\ /g; s/\ tu\ /\ /g; s/\ il\ /\ /g; s/\ elle\ /\ /g; s/\ nous\ /\ /g; s/\ vous\ /\ /g; s/\ ils\ /\ /g; s/\ elles\ /\ /g; s/\ on\ /\ /g; s/\ mon\ /\ /g; s/\ ma\ /\ /g; s/\ son\ /\ /g; s/\ mien\ /\ /g; s/\ miènne\ /\ /g; s/\ leur\ /\ /g; s/\ leurs\ /\ /g; s/\ eux\ /\ /g; s/\ ce\ /\ /g; s/\ ça\ /\ /g; s/\ ces\ /\ /g; s/\ se\ /\ /g; s/\ sa\ /\ /g; s/\ ses\ /\ /g; s/\ qui\ /\ /g; s/\ que\ /\ /g; s/\ quoi\ /\ /g; s/\ quand\ /\ /g; s/\ ne\ //g; s/\ me\ //g; s/\ qu\ //g; s/\ cette\ //g; s/\ cet\b //g;s/\ si\ //g; s/\ quel\ //g; s/\ sur\ //g' | sed -e 's/\ /###/g; s/\n/###/g; s/\./\.\n/g; s/\!/\!\n/g; s/\?/\?\n/g; s/\:/\:\n/g; s/\;/\;\n/g' > $HOME/texte1.txt;

echo "calcul de fréquence de mots couplés dans le texte";

#algo ordre decroissant
for i in `awk '{print $0}' $HOME/dictionnaire_mots-couples.txt | sed -e "s/\ /###/g"`; do echo "$i:`grep $i -c $HOME/texte1.txt`"; done | grep :0$ -v | sed -e 's/###/\ /g' | sort -t: -k2nr,2nr >$HOME/TABLE_RS2.txt;

#efface texte1
echo "efface texte1.txt";
rm $HOME/texte1.txt;

#efface $HOME/dictionnaire_mots-couples.txt
echo "efface $HOME/dictionnaire_mots-couples.txt";
rm $HOME/dictionnaire_mots-couples.txt;

echo "--- FIN ---";

gedit $HOME/TABLE_RS2.txt || nano $HOME/TABLE_RS2.txt;

 

Version Stable 1.0 officielle executable en extention .sh :

###################
#BOITE DE DIALOGUE
file=`zenity  --file-selection --title "Choisissez votre fichier texte"   --text  "Choisissez votre fichier texte"`;
fichier=$file;
#grep . "$fichier"

nom=`zenity --entry   --title="Ajouter une entrée"   --text="Saisissez votre nom de fichier :"`;
echo "le fichier résultat sera nommé $HOME/"$nom"_TABLE_RS2.txt";

#I liste tous les mots de votre texte dans une colonne

echo "I listage des mots du texte puis exclusion des petits mots";

grep . "$fichier" | sed "s/\ /\n/g" | sed "s/'/\n/g" | sed 's/\W//g' | grep '^[a-z]' | grep '[a-z]$' | sort | uniq | grep -iv ^'\(le\|la\|les\|un\|une\|du\|des\|mais\|ou\|est\|donc\|or\|ni\|car\|à\|dans\|et\|par\|y\|pour\|en\|vers\|avec\|de\|sans\|sous\|je\|tu\|il\|elle\|nous\|vous\|ils\|elles\|lui\|on\|mon\|ma\|son\|ton\|ta\|te\|vos\|nos\|mien\|miènne\|me\|mes\|où\|leur\|leurs\|eux\|ce\|cet\|cette\|ça\|ces\|se\|sa\|ses\|qui\|que\|quoi\|quand\|quel\|lequel\|lesquels\|laquelle\|dont\|aux\|au\|ne\|si\|sur\|ceci\|cela\|ci\|celle\|celles\|ceux\|a\|z\|e\|r\|t\|y\|u\|i\|o\|p\|q\|s\|d\|f\|g\|h\|j\|k\|l\|m\|w\|x\|c\|v\|b\|n\)'$ >> $HOME/tmp_RS_1.txt;

#II génération du couplage de chaque mot de la liste par association

echo "II association de chaque mot par deux";
for i in `grep . $HOME/tmp_RS_1.txt`; do for j in `grep . $HOME/tmp_RS_1.txt`; do echo "$i $j" >> $HOME/dictionnaire_mots-couples.txt; done; done

#efface $HOME/tmp_RS_1.txt

echo "efface $HOME/tmp_RS_1.txt";
rm $HOME/tmp_RS_1.txt;

#III calcul de fréquence d'association de mots

echo "III 1) calcul de fréquence de mots couplés dans le texte : filtre";

grep . "$fichier" | sed -e 's/\ le\ /\ /g; s/\ la\ /\ /g; s/\ les\ /\ /g; s/\ un\ /\ /g; s/\ une\ /\ /g; s/\ du\ /\ /g; s/\ des\ /\ /g; s/\ mais\ /\ /g; s/\ ou\ /\ /g; s/\ est\ /\ /g; s/\ donc\ /\ /g; s/\ or\ /\ /g; s/\ ni\ /\ /g; s/\ car\ /\ /g; s/\ à\ /\ /g; s/\ dans\ /\ /g; s/\ et\ /\ /g; s/\ par\ /\ /g; s/\ y\ /\ /g; s/\ pour\ /\ /g; s/\ en\ /\ /g; s/\ vers\ /\ /g; s/\ avec\ /\ /g; s/\ de\ /\ /g; s/\ sans\ /\ /g; s/\ sous\ /\ /g; s/\ je\ /\ /g; s/\ tu\ /\ /g; s/\ il\ /\ /g; s/\ elle\ /\ /g; s/\ nous\ /\ /g; s/\ vous\ /\ /g; s/\ ils\ /\ /g; s/\ elles\ /\ /g; s/\ on\ /\ /g; s/\ mon\ /\ /g; s/\ ma\ /\ /g; s/\ son\ /\ /g; s/\ mien\ /\ /g; s/\ miènne\ /\ /g; s/\ leur\ /\ /g; s/\ leurs\ /\ /g; s/\ eux\ /\ /g; s/\ ce\ /\ /g; s/\ ça\ /\ /g; s/\ ces\ /\ /g; s/\ se\ /\ /g; s/\ sa\ /\ /g; s/\ ses\ /\ /g; s/\ qui\ /\ /g; s/\ que\ /\ /g; s/\ quoi\ /\ /g; s/\ quand\ /\ /g; s/\ ne\ //g; s/\ me\ //g; s/\ qu\ //g; s/\ cette\ //g; s/\ cet\b //g;s/\ si\ //g; s/\ quel\ //g; s/\ sur\ //g' | sed -e 's/\ /###/g; s/\n/###/g; s/\./\.\n/g; s/\!/\!\n/g; s/\?/\?\n/g; s/\:/\:\n/g; s/\;/\;\n/g' > $HOME/texte1.txt;

echo "III 2) calcul de fréquence de mots couplés dans le texte : cherche";

#algo ordre decroissant
for i in `awk '{print $0}' $HOME/dictionnaire_mots-couples.txt | sed -e "s/\ /###/g"`; do echo "$i:`grep $i -c $HOME/texte1.txt`"; done | grep :0$ -v | sed -e 's/###/\ /g'>$HOME/tmp_"$nom"_TABLE_RS2.txt;

grep . $HOME/tmp_"$nom"_TABLE_RS2.txt | sort -t: -k2nr,2nr >$HOME/"$nom"_TABLE_RS2.txt;

#efface $HOME/"tmp_$nom"TABLE_RS2.txt
echo "efface $HOME/tmp_"$nom"_TABLE_RS2.txt";
rm $HOME/tmp_"$nom"_TABLE_RS2.txt;

#efface texte1
echo "efface texte1.txt";
rm $HOME/texte1.txt;

#efface $HOME/dictionnaire_mots-couples.txt
echo "efface $HOME/dictionnaire_mots-couples.txt";
rm $HOME/dictionnaire_mots-couples.txt;

echo "--- FIN ---";

gedit $HOME/"$nom"_TABLE_RS2.txt || nano $HOME/"$nom"_TABLE_RS2.txt;

###################

Mise à jour le Samedi, 19 Mars 2011 21:03