Séance 6 Extraction des bigrammes et des contextes

Séance n°6 : 18/11/2020

L’extraction du charset dans une page html:

egrep « <meta.+charset » ./PAGES-ASPIREES/*.html

Cette commande nous permet de récupérer le charset de la page en question.

Pour aller plus loins:

for file in $(ls PAGES-ASPIREES/*.html);

do echo $file ;

egrep -oi « <meta[^>]*charset ?= ?\ »?[^\ » ,]+\ »? » $file | egrep -oi « charset.+ » | cut -f2 -d= ;

echo « ————————« ; read;

done

Cette commande est faisable au cas où les pages auraient le charset.

Attetion : [^>] ça veut dire que celui qui ne contien pas de >

       ^> c’est pour indiquer le début

Ainsi, à chaque fois que l’on tappe sur enter, on va parcourir le répertoir PAGES-ASPIREES et afficher le charset de tous les fichiers.

Un script original qui marche pour tous les systèmes:

for file in $(ls PAGES-ASPIREES/*.html);

do ./PROGRAMMES/detect-encoding/detect-encoding.exe $file;

echo « ————————« ;

done

Pour le moment je ne comprends pas bien comment réaliser cette commande, ni ce qu’est le fichier d’une extension .exe. Je vais vérifier après.

le calcul de l’index hiérachique d’un fichier et le calcul des bigrammes de ce même fichier.

index hiérarchique : liste des mots du fichier et leur fréquence

ls DUMP-TEXT/   

egrep -o « \w+ » DUMP-TEXT/3-10.txt | sort | uniq -c | sort -nr  

#par cette commande, on demande d’afficher la requête(les caractères\w) par egrep -o dans le fichier 3-10.txt, sous le répertoire DUMP-TEXT, puis on va trier le résultat, avec uniq -c, on va afficher avec l’index les lignes qui ne se répètent pas, puis on avec sort -nr on va trier par la valeur décroissante.

#la commande précédente extrait les mots (\w+) puis les trie et les filtre…

calcul des bigrammes : liste des séquences de 2 mots consécutifs et leur fréquence

on va recalculer la liste des mots du fichier (index) puis on va aligner ce fichier avec le même fichier sans la première ligne.

egrep -o « \w+ » DUMP-TEXT/3-10.txt > index1.txt           

tail -n +2 index1.txt   

#afficher à partir de la deuxième ligne jusqu’à la n ième ligne

tail -n +2 index1.txt > index2.txt   

paste index1.txt index2.txt

#compiler les deux fichiers

paste index1.txt index2.txt | sort -fg | uniq -ic | sort -rn

#sort -fg : trier en utilisant les chiffre arabes et tout en majuscule

#uniq -ic:  -c afficher avec l’index les lignes qui ne se répètent pas

          -i ignorer les minuscules majuscules

#sort -r n: trier par la valeur décroissante

présentation de la commande cut

sort

-b:ignorer l’espace au début de chaque ligne;

-c:vérifier si le fichier est bien trié en ordre

-f:prendre les minuscules pour les majuscules

-n:trier par la valeur du chiffre(croissant)

-o:sauvegarder le résultat dans un fichier

-r:trier à l’inverse

-t:fixer le symbole pour séparer

-g: utiliser le chiffre normal pour trier

#pour créer du texte, on va utiliser la commande echo  

echo « je suis du texte »                                                                                                                                           

# RAS                                                                                                                                                           

# maintenant on va affiner en créant du texte                                   

# contenant une tabulation (via le caractère \t)                                

# pour que ce caractère soit pris en compte par echo                            

# il faut ajouter l’option -e                                                   

echo -e « je\tsuis »                                                                                                                                                     

# on voit bien la tabulation produite !                                                                                                                       # et maintenant on peut ajouter des lignes supplémentaires                      

# \n est le caractère de retour à la ligne

echo -e « je\tsuis\ntu\tes\n »                                                    

# on a donc désormais du texte « structuré » en « colonnes » !                      

# on va pouvoir utiliser cut                                                    

# cut permet d’extraire des « colonnes » dans un flux textuel…                  

# il faut lui préciser le numéro de la colonne à extraire (option -f)           

# f pour field (champ)                                                          

# et il faut lui préciser le caractère qui délimite chaque colonne              

# par défaut, c’est la caractère tabulation (sinon on  va le spécifier via l’option -d)                                                                                                                                                # donc, on reprend notre texte :                                                

echo -e « je\tsuis\ntu\tes\n »    

# extraction de la première colonne puis la seconde                             

echo -e « je\tsuis\ntu\tes\n » | cut -f1                                                                                                                                                                                                                                                                                                                                              echo -e « je\tsuis\ntu\tes\n » | cut -f2                                          

# si le texte ne contient de tabulation, on donne le délimiteur                                                                                                 

echo « je suis du texte » | cut -d »  » -f1                                                                                                                                        

echo « je suis du texte » | cut -d »  » -f2                                                                                                                                   echo « je suis du texte » | cut -d »  » -f3                                                                                                                                          

echo « je suis du texte » | cut -d »  » -f4

# on a ici un programme puis puissant de segmentation d’un flux textuel !!!        

il faut choisir les mots : examiner en contexte le comportement du mot

c’est nécessaire de garder tous les textes? Non, simplement pour chaque dump , le contexte réduit autour de mot, à proximité du mot

concaténation de tous les mots, contextes dans différente langue

extraction des contextes ave egrep

affichier les dossiers sous le répertoire DUMP-TEXT

afficher le contenu du texte

chercher l’occurence de trump ou macron en ignorant majuscule minuscule dans le texte

egrep filtre par défaut la ligne

-n  avec index

–color  avec coouleur

mais ça peut être les phrases qui n’a rien avec le mot clé, il faut regarder un peu plus que la ligne

-c 2 deux lignes avant deux ligne après l’occurence

ça ne marche pas. Pas de solution pour lr momenyt même si j’ai installé ActivePerl et l’ai ajouté dans le paths du système.

Donc je vais essayer la version script exécutable sous windows.

Grâce au script finement conçu, on peut savoir les arguments à tapper dans la terminale

version exécutable windows

version script

J’ai essayé avec amants-utf8.txt pour voir

c’est le html généré suite à l’exécution de la commande.

pour extraire les trigrammes

le problème réside dans le fait que l’on prend aussi l’espace est vide, il faut l’améliorer

il y a quand même des caractères chiffres inutiles

(Comment tokenlizer? Explication dans la partie analyse du script)

Avec iconv  -l : on peut savoir la liste d’encodage reconnu par le système.

L’analyse du script projet-2020-11-18.sh

egrep -C 2 -i « $motif » ./DUMP-TEXT/utf8_ »$compteur_tableau-$compteur ».txt > ./CONTEXTES/utf8_ »$compteur_tableau-$compteur ».txt;

Cette commande nous permet de récupérer la ligne correspondante et 2 lignes avant et près l’occurrence du motif choisi(en ignorant majuscule,minuscule) dans les textes sous le répertoire DUMP-TEXT et sauvegarder le résultat dans les fichiers sous le répertoire CONTEXTES.

Pourquoi 2 lignes avant et après? C’est pour avoir le contexte du mot choisi.

perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl « UTF-8″ ./DUMP-TEXT/utf8_ »$compteur_tableau-$compteur ».txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-2020.txt ;

Par cette commande on peut donner à voir les contextes au format HTML.

mv resultat-extraction.html ./CONTEXTES/ »$compteur_tableau-$compteur ».html;

Il s’agit ici de la commande mv qui va déplacer le résultat dans le répertoire CONTEXTES en le sauvegardant comme eur_tableau-$compteur ».html.

mv

déplace ou renomme des fichiers ou des répertoires.

Si le dernier argument est le nom d’un répertoire existant, mv placera tous les autres fichiers à l’intérieur de ce répertoire, en conservant leurs noms. Sinon, s’il n’y a que deux fichiers indiqués, il renommera le premier pour remplacer le second. Une erreur se produit s’il y a plus de deux fichiers indiqués et si le dernier argument n’est pas un répertoire.

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 ;

egrep -i -o « \w+ » correspond à n’importe quel mot:  

\w: [a-zA-Z0-9_]

uniq -c : trier par l’index

sort -r -n : trier par valeur décroissante de l’index

sort -s : stabiliser la commande

sort k 1,1 : ne traite que le premier champ(field): ça vaut dire que l’on ne trie que l’index mais pas le contenu qui contient probablement les chiffres.

Ainsi, on peut tokenlizer les mots sans briut.

tr  »  » « \n » < ./DUMP-TEXT/utf8_ »$compteur_tableau-$compteur ».txt | tr -s « \n » | egrep -v « ^$ » > index1.txt ;

tr  »  » « \n »: remplacer l’espace par le retour à la ligne

tr -s « \n »: remplacer tout ce qui est la chaîne viede(correspond à un caractère séparateur ; un séparateur est défini comme [\t\n\f\r\p{Z}]. ) par le retour à la ligne.

egrep -v « ^$ » : afficher tout ce qu”il n’y pas de chaîne vide.

tail -n +2 index1.txt  > index2.txt;

afficher la ligne corresponde et 2 lignes avant et après

tail -n +2: à partir de la dauxième à la n nième ligne

paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_ »$compteur_tableau-$compteur ».txt ;

on concatène les deux textes et le trie par l’index (décroissant)

installer la bibilothèque perl

télécharger les archives

décompresser le fichier avec une extension de tar.gz

commande: tar -zxvf Unicode-String-2.10.tar.gz

se déplacer dans le répertoire Unicode-String-2.10

perl Makefile.PL

sudo apt install make

make

make test

make install

Le problème se signale parce que l’on a pas de root(pas de droit de modifier les répertoires).

if faut libérer le root pour créer des fichiers sous le répertoire lib

ici problème de même genre

if faut libérer le root pour créer des fichiers sous le répertoire man

puis cpan install Unicode::String

Voilà!

Mais en fait il y a une solution plus simple: devenir l’administrateur de la commade en ajoutant sudo devant la commande:

sudo cpan cpan install Unicode::String

Un camarade n’a quand même pas réussit avec cette commande sous Windows parce qu’il n’a pas installé gcc, il a réussit après l’avoir mis au point.

EXO:

tester notre propre url

Maintenant texte chinois,français et anglais, coréen sous la main

Mais c’est un peu compliqué pour chinois et coréen parce que l’on a pas d’outil pour la tokenlization. Donc maintenant je vais tester seulement url français et anglais!

J’ai modifié le script que Serge a fait pendant le cours et l’ai sauvegardé comme proyihan1.sh

donc commande à tapper :  bash ./PROGRAMMES/proyihan1.sh ./URLS ./TABLEAUX/tableau_proyihan1.html « foreign workers|salariés expatriés|travailleurs expatriés »

Problème : on a bien généré des bigrammes et les contextes, mais il n’y a rien dans les fichiers.

Reste à le résoudre, mais en tout l’encadrement est pas mal selon le tableau.

Après une conversation avec une camarade, j’ai constaté que dans le répertoire minigrep se trouve un fichier où on a dû mettre les motifs mais je n’ai pas modifié le fichier en russe qui se sert d’un exemple. Donc jai fait une petite correction.

Il y a beaucoup de fichiers vides parmi les fichiers bigrammes et index ainsi que contextes, c’est probablement lié au fait que lynx récupère les occurrences par ligne, si les mots clés ne sont pas dans les mêmes lignes il se peut que l’on n’ait rien.

Donc il vaux mieux de couper tous les mots par « | ».

Puis j’ai testé uncore une fois, ça a l’air pas mal mais avec encore un peu de problème lié au fichier vide. C’est parce que j’ai mal copié le nom de fichier dans le script donc quand on le rappelle on ne le trouve pas.

C’est parce que j’ai mal copié le nom de fichier dans le script donc quand on le rappelle on ne le trouve pas.J’ai changé le nom du fichier à utf_8.

Attention: il faut enlever tous les liens pdf dans URL, on ne traite pas ce genre de fichers.

Bibilographie

1.https://superuser.com/questions/33362/how-to-unix-sort-by-one-column-only

Laisser un commentaire

Concevoir un site comme celui-ci avec WordPress.com
Commencer