Mis en avant

BIENVENUE

Bonjour !

Nous sommes étudiantes en master 1 de Traitement Automatique des Langues, Maude Antoine, Chenjing Zhang et Lila KIM.

Dans le cours intitulé « Projet encadré », ce blog a été créé dans le but de présenter les démarches et les difficultés confondues durant l’élaboration du projet.

Nous envisageons travailler sur le champs lexical du terme « la protection environnementale » dans de diverses langues, le français, le chinois, le coréen et l’anglais américain. Le but de notre projet serait d’observer les différentes prises et les réactions de la population dans les pays en question, à travers des revues politiques et des articles de presse.

Exercice sur la segmentation du coréen (2)

Bonjour

Le professeur m’a conseillé d’une autre façon de récupérer la fréquence du motif. L’exemple de la commande suggérée est le suivant :
egrep -o « \w+ » 1-1-utf8-segment.txt | LANG=ko_KR.utf-8 sort | LANG=ko_KR.utf-8 uniq -c | LANG=ko_KR.utf-8 sort -r > index.txt

Ici, on spécifie la langue qui est en question en faisant le tri et le filtrage, et on utilise l’expression « \w+ » car elle permet aussi de détecter les caractères de mots du coréen dans l’éditeur du texte.

Malheureusement, cette commande ne me donne pas de bon résultat dans mon environnement de travail tandis que dans celui du professeur, elle marchait très bien. Je vous mets son résultat ! Il est dommage que l’on ne puisse trouver de raisons pour lesquelles cette commande ne marche pas sur ma machine.

J’ai donc décidé de garder mon script comme tel. Et le problème pour avoir le nombre d’occurrences du motif était lié au script. J’avais oublié de mettre une ligne au début : motif=$3; 😅 C’était alors normal que le comptage du motif ne fonctionne pas. Je l’ai alors inséré dans le programme et il m’a donné le résultat que j’attendais à obtenir.

Le premier article ne contient aucun motif car dans le texte, nous avons « 환경__보호 »(2 espaces) au lieu de « 환경_보호 »(1 espace).
C’est dû à la manipulation des données. J’ai remplacé le retour à la ligne par un espace pour faire un texte segmenté.

De plus, en regardant et lisant le texte segmenté, je me suis rendu compte que les textes étaient « abusés » de segmentation qui résultent de différents problèmes dans des résultats.😭

Par exemple, pour récupérer les contextes, je n’ai qu’une seule ligne parce que j’ai rassemblé toutes les lignes dans une ligne… Dans un premier temps, j’ai essayé de réorganiser l’ordre des commandes dans le script.

Je cherche les motifs dans un fichier non segmenté et crée un fichier contexte. Avec celui-ci, on construit des contextes en html avec le programme perl. En suite, on segmente et cherche la fréquence du motif dans le fichier. Ainsi, on a un résultat qui a l’air bon :)….

Il me reste alors à résoudre le problème cité au dessus avec deux espaces, un problème pour les urls d’anglais, et éventuellement un problème avec le bigramme……. 😤🤔
Peut-être je créerai un autre script de programme pour les urls d’anglais..

J’ai une question sur l’itrameur et le nuage de mots. Il me semble que ces outils ne comprennent (?) pas de caractères coréens.. Pour l’itrameur il n’arrête pas à calculer et le nuage de mots donne des choses non compréhensibles ou des mots en anglais… Voici les exemples ! :

Et une autre question : il est normal qu’on ne voie pas une grande différence entre l’index et le bigramme ? Si je ne me trompe pas, le bigramme donnerait trois colonnes, dont deux sont des mots avec le nombre d’occurrence. Mais dans mes fichiers de bigramme, parfois on a deux mots qui sont ensemble, et la plupart se présente avec un seul mot (c’est surtout le cas du coréen..).

Exercices sur la segmentation du coréen

Comme le coréen est une langue à cas, seul l’espace ou des caractères spéciaux ne permettent pas à la langue de délimiter les mots, contrairement au français. Par exemple, en français, les mots sont séparés par un espace ou un caractère spécial. Dans une phrase « C’est un article de Lila KIM », on dirait avoir 7 mots dont « C » qui est le sujet de « est ». Cela nous permet de désigner le mot par une expression régulière « \w+ ».

Cependant, cette expression ne reconnaît pas les caractères coréens car elle est équivalente à [a-zA-Z0-9]. Il est donc normal qu’elle ne reconnaisse pas de caractères qui ne sont pas des alphabets latins. Une camarade a trouvé une manière alternative pour retrouver les caractères coréens : [ㄱ-힣]+.

Une fois l’expression trouvée qui délimite des caractères par un caractère non lettre, j’ai essayé de séparer les cas de la langue par un espace. Pour ce faire, j’ai d’abord regardé les travaux qu’ont fait les anciens étudiants, et je me suis rendu compte qu’ils ont utilisé un programme d’analyseur de morphologie de la langue coréenne, HANNANUM. J’ai donc fouillé les articles pour voir sa fonctionnalité et la comparer avec d’autre analyseur de même type.

한국어 형태소 분석기 성능 비교 (Comparaison des fonctionnements des analyseurs de morphologie de la langue coréenne)
Almost Baseball, CSE and Diary

출처 (Source) : https://iostream.tistory.com/ [Almost Baseball, CSE and Diary]

Voici un extrait d’un article qui compare les fonctionnements de différents analyseurs, cette partie concerne une phrase sans espace. En coréen, il est obligatoire d’utiliser un espace dans une phrase selon la grammaire, sauf quand il y a un seul mot. Toutefois, dans le langage familier, nous pouvons ne pas mettre d’espace. L’anaylseur Hannanum (deuxième colonne) reconnaît la phrase sans espace comme un seul mot alors que d’autres analyseur détectent des mots de nature différente et des cas. C’est pourquoi j’ai décidé d’opter pour un analyseur « mecab » qui est autre que Hannanum.

Pour télécharger et faire fonctionner, nous pouvons suivre les étapes décrites dans l’article suivant : https://provia.tistory.com/57

Voici la commande pour tester : on appelle la commande (en blanc), puis écrit une phrase que l’on veut analyser (en jaune). Cette commande nous donne le résultat qui contient les mots segmentés dans la colonne à gauche, puis les mots étiquetés dans la colonne à droite.

J’ai remarqué que la commande résulte toujours une ligne de plus « EOS » à la fin du syntagme, j’ai donc décidé de la supprimer (tr -d « EOS »).
De plus, parce que ce ne sont pas des mots étiquetés que l’on veut garder dans le texte, j’ai pris seulement des mots segmentés (cut -f1). Pour la commande « cut » je n’ai pas besoin de spécifier le délimiteur car je veux faire le cut avec le délimiteur « tabulation » et que la tabulation est la valeur par défaut de la commande « cut ».

Remarquant que les mots segmentés occupent chacun une ligne, je les ai rassemblés dans une seule lignes mais avec un délimiteur « espace » (tr « \n »  » « )

Avec ce résultat, nous pouvons voir que les caractères latins (en bleu) ne sont pas affectés par l’analyseur de morphologie de la langue coréenne. Cela dit que l’on peut mettre cette commande dans le programme sans une condition (par exemple, if [[ \w != [a-zA-Z] ]]) car l’analyseur détecte que les suites de caractères coréens et les autres seront séparés par un espace (le cas de « Development Goals »).

Les séquences de caractères sont bien détectées par l’expression « [ㄱ-힣]+ »

En outre, j’ai tenté de faire la commande « egrep » pour chercher une suite de caractères en coréens. La commande en bleu cherche bien les motifs « protection environnementale » (en jaune).

Maintenant, on va procéder à mettre ces commandes dans mon script…

! Avant de le commencer, j’ai une chose que je ne comprend pas :

On est dans le cas où l’encodage est égal à UTF-8. Avec les articles coréens encodés en UTF-8, on a fait un dump texte en s’assurant que l’encodage en entrée et celui de sortie sont bien UTF-8. MAIS quand je regarde dans l’éditeur de texte, l’encodage est japonais et les caractères sont tous erronés… Suite à ce problème, j’ai dû faire une conversion à nouveau en utf-8…

Avec les mots segmentés, nous avons pu obtenir du résultat pour l’index. Mais malheureusement, nous n’avons pas de bons résultats pour le biagramme et la fréquence du motif. J’ai beaucoup du mal à résoudre ces problèmes et je ne vois pas d’où ils viennent car la commande « egrep » a marché dans le terminal… Le résultat pour la fréquence est toujours de 1 alors que le motif est présent plus d’une fois.

J’ai donc essayé à nouveau dans le terminal, et voici le résultat. La commande « egrep » avec l’option ‘count’ me dit qu’il y a une seul occurrence de motif dans le texte alors la commande sans -c me dit qu’il y en a deux.
C’est juste car l’option -c compte le nombre des lignes qui contiennent le motif et que j’ai rassemblé toutes les lignes en une seule ligne. J’ai donc contourné ce problème en utilisant la commande « wc » à la place de l’option « -c ».

Cette fois-ci, la commande wc -l me donne le bon nombre d’occurrences de motif ! J’ai donc inséré cette commande dans le script en espérant que ça marche…

À nouveau, je suis tombée sur un mauvais résultat… Je n’arrive pas à comprendre pourquoi cette commande a marché dans le terminal et que non dans le script….

Exercices de séance 9 (partie 2)

Comme on a fini le script pour le tableau, on es entré dans la 2e phase du projet!

Dans le but d’analyser le corpus de différents langues, on doit préparer le corpus en amont.

On regroupe tous les textes dans la colonne de DUMP et on les met dans un seul fichier: GROS_FICHIER.txt; On peut se servir de la commande cat pour tout concaténener:

cat 1.txt 2.txt 3.txt 11.txt > unseulfichier.txt 

Pour bien structurer notre corpus, on ajoute des paires de balises pour chaque texte:

<dump=1.txt>

texte dump 1 

</dump=1> 

<dump=2.txt>

texte dump 2 

</dump=2>

Pour atteindre à cette étape, on fait parcourir des fichiers des le répertoire de DUMP-TEXT par for , et ensuite faire écrire la balise ouvrante <dump=$fichier>, puis, on ajoute le contenu du fichier, enfin, on fait écho la balise fermante </dump=$fichier>.

Chaque fois, il faut tape >> pour ne pas écraser le fichier précédant.

Donc, ce que on obtiens dans le GROS_FICHIER.txt:

On voit que la structure est bien illustrée comme:

<dump=1.txt>

texte dump 1 

</dump=1>

_____________________________________________________________

Voilà !

Exercices de séance 9

Bonsoir, on va réviser ce qu’on a découvert en cours 9!

Tout d’abord, on finit les codes dans la partie else qui est le traitement des urls qui ne sont pas en utf-8. Donc on teste sur l’encodage pour voir s’il est dans la liste par la commande iconv -l et on lui rend comme une variable à fin de l’utiliser dans la suite de code:

retouriconv=$(iconv -l | egrep -i $encodage)

Si l’encodage trouvé est reconnu par iconv, on fait dump et met les textes dans le répertoire DUMP-TEXT.

Par exemple, si on veut tester sur l’encodage « gb2312 » dans le terminal:

Ensuite, on le convertit en utf-8 avec la commande iconv et les options -f -t .

Maintenant, on a les textes en utf-8, donc on peut répéter les étapes qui ont été exécutées dans la boule de if , c’est-à-dire dans la condition que le code de retour est 200 et l’encodage est utf-8. Le code entier de cette partie est illustrée en-dessous:

Enfin, on arrive à la fin du script. Les tableaux fonctionnent bien, les encodages s’affichent normalement, y compris les encodages récupérés non en utf-8.

Voilà !

Exercices de séance 8 (2)

Une fois que j’ai résolu tous mes problèmes concernant l’encodage, je peux maintenant procéder à écrire l’instruction ‘else’ (si l’encodage n’est pas utf8).

Je fais d’abord le dump texte avec l’encodage trouvé, jusque-là, c’est de la même façon que pour l’encodage UTF-8.

Ensuite, je fais une liste des encodages que ‘iconv’ est capable de reconnaître. De cette liste, je cherche mon encodage sans être sensible à la case.
L’option ‘–ignore-case’ est aussi appelée comme ‘-i’, et elle permet de chercher un motif (quelque soit en minuscule ou/et en majuscule).
Je mets la valeur (output) de ces commandes dans une variable appelée ‘encodageiconv’ pour pouvoir utiliser dans un autre contexte.

La condition ‘if’ est utilisée à nouveau pour demander si l’encodageiconv (output de la commande précédente) n’est pas « rien ». S’il y a quelques choses dans la variable, on va convertir le dump en UTF-8.
La commande ‘iconv’ porte deux options de base :
-f : –from-code
de quel encodage on convertit, donc on spécifie l’encodage de l’entrée
-t : –to-code
pour quel encodage on convertit, donc on spécifie l’encodage de la sortie

De plus, j’ai utilisé une option -c pour ne pas bloquer ‘iconv’ si des caractères ne peuvent pas être convertis (par exemple, des caractères erronés).

Pour le reste (création d’un fichier contexte.txt, fréquence de motif, contexte.html, index hiérarchique, et biagramme), il suffit de copier et coller ce qui était écrit en haut du programme en changeant parfois le nom du fichier. Parce que l’on a converti notre dump texte en UTF-8 et que l’on a donné un autre nom au fichier de sortie.

Voilà 🙂

Merci !

Exercices de séance 8

Comme je rencontre beaucoup de difficultés pour récupérer l’encodage d’un url (parce que l’encodage récupéré à l’aide de ‘curl’ ne correspond pas à l’encodage réel de la page), je vais me mettre à exécuter la commende sur un des urls qui ont ces problèmes au lieu d’exécuter tout le script.

Dans la première commande, j’ai aspiré la page en question et mis la page aspirée dans le répertoire PAGES-ASPIREES sous le nom de « essai.html ». Ensuite, j’ai cherché dans cette page aspirée le charset qui peut contenir  » ou ‘ 0 ou 1 fois et tout ce qui n’est pas des caractères spéciaux (« , ‘, &, ou ,) et qui peut finir par des guillemets ou non. Ainsi, cette commande me donne comme résultat « charset=euc-kr » qui est l’encodage réel.

J’ai donc rajouté des commandes pour segmenter cette séquence de caractères par un délimiteur = et prendre la deuxième partie de la segmentation. Ensuite, j’ai enlevé le/les guillemets (= les transformer par rien), puis changé les caractères de lettres qui sont en minuscule par des majuscules. Jusqu’ici tout va bien !

J’ai exécuté la même commande que tout à l’heure mais sur une autre adresse, et elle contient plusieurs encodages… En vérifiant ce qui est le vrai encodage, je me suis rendu compte que c’était toujours la première ligne qui contient le vrai encodage.

J’ai alors pris la première ligne (qui contient le vrai encodage !!!), segmenté, transformé…! et cela m’en donne un (et un seul encodage réel).

J’ai essayé à nouveau d’exécuter cet ensemble de commandes sur le premier url qui n’avait qu’un seul encodage pour voir si ces commandes marchent.

Et ça marche !!

J’ai appliqué cette commande dans mon script, et cela marche sur la totalité des urls (dont la langue est le coréen, et aussi l’anglais).

Cependant, je trouve un autre problème pour l’url n° 43 dans l’image en haut, il n’a pas d’encodage dans la page aspirée. Quand on fait « curl -sIL » sur ce url, on trouve bien l’encodage. Pour ce genre d’urls, il faut d’abord faire « curl », puis chercher l’encodage.

Premièrement, j’ai mis cette commande dans l’instruction de ‘else’ (l’encodage n’est pas utf-8), et donné une autre condition (si l’encodage est rien). Cela donne un bon encodage mais aucun résultat après l’encodage car la machine lit mon script de haut vers le bas. J’ai donc changé la place de cette commande.

La condition est augmentée dans la structure de mon script. Après la récupération de l’encodage à partir des pages aspirées, je demande si l’encodage est « rien », je cherche l’encodage d’une autre façon.

Et voici, l’url « donga.com » a suivi l’instruction de la condition if (si l’encodage est utf8) !

Merci XD

Exercice de séance 7

Salut, je commence à réviser ce qu’on a fait en cours 7 !

La dernière fois, on arrive à récupérer les codes d’état et les encodages. Maintenant, on es dans la boucle de la condition: les codes de retour est égale à 200 et les encodages sont bien en UTF-8.

Dans un premier temps, on lynx la page aspirée en utilisant :

lynx -dump -nolist -assume-charset=$encodage -display-charset=$encodage

Et on fait sortir le text dans le répertoire DUMP-TEXT.

Ensuite, dans le but d’analyser les textes se basant sur les occurrences clefs, on veut obtenir les contextes autour les motifs. Donc, on se sert de egrep:

egrep -i -C2 « $motif »

En l’occurrence, on veut juste les 2 lignes avant et 2 lignes après les motifs et ignore les majuscules ou minuscules avec l’option i.

Je montre un exemple:

Dans cet exemple, je prends le mot « séisme » comme le motif, et je veux afficher les 2 lignes avant et après ce motif en montrant aussi le numéro de ligne.

Dans un troisième temps, pour savoir les fréquences du motif dans les textes, on utilise encore egrep:

egrep -i -C2 « $motif »

On voit que ce mot apparait 19 fois dans ce texte.

Quatrièmement,  dans le but de faire un travail d’extraction de motif et le sortir en contexte html, on profite le script Perl déjà-fait: minigrepmultilingue.pl

Donc, j’exécute le script dans la commande avec trois arguments:

Voilà ce que l’obtiens: le texte html qui montrent les motifs que je cherche et les lignes;

Parce que la langue que je traite est le mandarin, à cet étape-là, je vais ajouter comment on fait pour segmenter les mots chinois ayant recours au logiciel qui s’appelle ‘Stanford-segmenter’; Donc, je l’exécute dans le terminal:

Je refais une fois avec un output standard:

Ok, maintenant, on ouvre le fichier segment.txt :

Voilà, on a le bon résultat de segmentation!

Continuons …

Ensuite, on arrive à l’étape de faire l’index hiérarchique. Tout d’abord, on fait sortir tous les mots par egrep -o « \w+ » :

ça me donne les chiffres et les lettres:

Mais j’ai trouvé une autre expression régulière qui peut s’appliquer sur le chinois:

On voit que ces mots se montrent en pair, mais verticalement. Il y a « la protection », « l’atmosphère », »l’hiver » etc. Pour montrer en paire et horizontalement, j’améliore un peu l’expression régulière:

Par cet utilisation d’expression régulière avec {2} , ce qu’on obtient n’est pas intéressant, parce qu’il se segmente des fois au milieu d’un groupe de mots.

Voilà une autre possibilité :

Ces index des mots se montrent individuellement.

__________________________________________

Jusqu’à là, j’exécute mon script avec 3 arguments contenant mes motifs, et mon tableau se représente comme ci-dessous:

Exercices de Maude

Exercice 1:

La commande “mkdir“ permet de créer un nouveau répertoire dans le répertoire courant. 

La commande “cd“  permet de changer de répertoire  
La commande “touch“ permet de créer un dossier vide dans le répertoire courant ou dans un répertoire donné (./ désigne le répertoire courant, ../ désigne le répertoire parent)
La commande “ls“  permet de voir les éléments d’un répertoire. 

La commande “echo“ permet d’afficher une chaine de caractère, suivit de “>“ permet de choisir un fichier où l’afficher, les doubles “>>“ permettent de concaténer plutôt que de supprimer ce qui est déjà dans le fichier. 
La commande “cat“ permet d’afficher le contenu du fichier donné. 
La commande “mv“ permet de changer le nom d’un fichier. 

La commande “cp“ permet de  créer une copie de fichier d’un répertoire à un autre ou au sein d’un répertoire et de renommer le fichier. 

La commande  “ls“ suivi de “>“ permet de stocker le résultat dans un fichier créé automatiquement si il n’existe pas déjà. Les doubles “>>“permettent de concaténer plutôt que de supprimer ce qui est déjà dans le fichier. 
On peut l’exécuter dans le répertoire courant ou changer le répertoire avant de nommer le fichier.

La commande “rm“ permet de supprimer un fichier 
La commande “rmdir“ permet de supprimer un répertoire

La commande “cat“ permet de créer un fichier, dans le répertoire courant, et ce qui est tapé ensuite sera son contenu.
La commande “less“ permet d’afficher le contenu du fichier et il faut presser Q afin de cesser la lecture du fichier. 

Exercice 2:

Afin de compter le nombre de fichier dans mon répertoire de travail, j’utilise la commande “ls“ qui affiche le contenu du répertoire courant et utilise la sortie de cette commande en entrée de la seconde commande grâce au pipe “|“. J’utilise ensuite la commande “wc -l“ afin  de compter les lignes de l’entrée (résultat de “ls“).
Je l’utilise sur mon répertoire courant Dossier_Travail puis sur un autre répertoire TEST2. 

Exercice 3:

Je fais une exécution séquentielle grâce au “;“ qui me permet d’effectuer une liste de commande sans les relier entre elles. 

Je fais un regroupement entre “()“ afin d’afficher leurs résultats dans un seul document nommé “qui“ que j’affiche et que je supprime.

Je fais une imbrication en utilisant “$()“ et “« “ qui permettent de faire la même chose, dans ce cas, c’est-à-dire d’exécuter une commande au sein même d’une autre commande (ici “pwd“ au sein de “echo“)

Exercice 4:

Voici le programme que j’ai écris pour créer la page HTML présentant un tableau avec mon Nom et Prénom et le sujet du projet.

Exercices de séance 6

Avant de commencer à faire des exercices, je vais énumérer les problèmes que j’ai rencontrés lors de l’élaboration du programme.

Le premier problème rencontré est sur une page dont le code d’http est 200. Quand je demande à la machine d’aspirer la page, et de faire le dump texte, il y a une erreur qui s’affiche et qui dit ‘404 Not Found Error !’. Cependant, dans le tableau, il est bien indiqué que le code était 200.

J’ai demandé au professeur sur ce sujet, et il m’a conseillé de mettre des guillemets avant et après le nom de mes urls. J’ai alors modifié mais ce problème persiste encore…

:

Deuxièmement, j’ai des fichiers qui ne sont pas en UTF-8, mais qui sont captés par la machine en tant que des fichiers encodés en UTF-8.

Code source de la page en question
HEAD de la page en question

Ici, on voit que cette page est encodée en EUC-KR si on regarde directement le code source de la page, alors qu’on a l’encodage UTF-8 quand on regarde la balise HEAD avec la commande « CURL » de bash. En l’occurrence, je ne comprends pas non plus pourquoi la machine me donne deux en-têtes.
De plus, il y a des fichiers qui sont détectés comme n’ayant pas d’encodage alors qu’ils sont en UTF-8. Je remarque toujours cette différence entre l’encodage dans le code source de la page et celui de la commende curl -SIL.

Comme je n’arrive pas à voir d’où viennent ces problèmes, je n’ai pas encore pu les résoudre. Je réessayerai plus tard.

:

Exercice – une autre condition

1) encodage est « connu par iconv » : lynx (avec encodage trouvé) –> iconv (convertir en UTF-8)
2) encodage n’est pas connu de iconv : egrep (rechercher l’encodage) –> lynx –> iconv

J’ai essayé de mettre en oeuvre une autre condition qui vérifie si la commande ‘iconv’ reconnaît l’encodage en question. Si elle le reconnaît, on fait le text dump avec l’encodage et le convertit en UTF-8 ; si elle ne le reconnaît pas, on utilise la commande ‘egrep’ pour chercher l’encodage.

Si ‘iconv’ reconnaît l’encodage, on fait le text dump, et le convertit en UTF-8
sinon, on cherche dans l’en-tête le motif « charset= »
Erreur !

Cette commande ne marche pas en me donnant des erreurs, j’estime que l’erreur vient de la condition if et ses instructions. Je corrigerai après la séance 7.

Exercice de séance 5

On va réviser ce qu’on a fait pendant le séance 5 !

Nous avons créé une table avec 2 colonnes, une colonne est complétée par les numéros en order et une autre complétée par nos urls qui sont en amont faits et réservés dans le répertoire URLS;

Aujourd’hui, on aspire le page html et on travaille dans la ligne de commande en utilisant la commande curl :

Tout d’abord, on regard la fonction de cette commande par l’outil : man:

Un exemple avec un des nos urls, on voit que cette commande nous donne les codes de cette page url:

Pour avoir le résultat de cette commande, on fait sortir et met dans un nouveau fichier, donc, on utilise l’option de curl qui est -o:

En l’occurrence, notre commande est : curl -o resultat « url »

Pour chercher l’encodage de nos urls, on utilise l’option –I pour afficher l’en-tête d’information de cette url, par exemple, la date, la taille, le type de code, etc;

Regardez ci-dessus le deuxième cadre rose: « HTTP/1.1 200 OK », cela signifie le code de statut de réponse HTTP et la valeur « 200 OK » montre la réussite de la requête.

En cours, le professeur veux sortir juste la valeur qui suffit de montrer la statut de réponse. Donc, on utilise cut pour obtenir la réponse:

Même si on a maintenant la valeur « 200 », cette illustration est moins claire à cause de l’information de déroulement; Pour régler ce problème, on ajoute une autre option s qui signifie le mode de silence, donc, maintenant, on ne voit que la valeur 200:

Jusqu’à là, on a l’information du code de statut, ensuite, on veut ajouter une colonne pour représenter l’information sur l’encodage. Donc, il faut qu’on cherche l’encodage par la commande aussi:

Voilà, on obtient le résultat de l’encodage, ici, UTF-8;

Ensuite, pour ajouter une nouvelle colonne, il suffit d’ajouter une paire de balises <td></td>, et on met ENCODAGE=$encodage dans le script;

Voilà , une nouvelle colonne:

On voit qu’il n’y a pas encore les informations sur l’encodage.

Pour avoir l’encodage, on utilise encore une fois la commande cut :

Mais on obtient les informations comme on a demandé par head -2 , pour tirer juste la dernière ligne de résultat, on fait une autre option tail :

ET voilà, ça nous affiche juste l’encodage.

Maintenant, on l’ajoute dans le script .sh comme ci-dessous:

encodage=$(curl -sI « $ligne » | head -2 | cut -f2 -d »= »| tail -1);

On exécute cette commande et rafraîchit tableau.html, voici ce que j’obtiens:

On voit qu’il me affiche des informations sur la date, le type de contexte et l’âge, mai s ce n’est pas l’encodage que l’on cherche.

_____________________________________________________

Ayant vu le commentaire du professeur, je trouve que la commande curl -sI « $ligne » | head -2 | cut -f2 -d »= »| tail -1 ne suffit pas pour la récupération de l’encodage, donc, je modifie la commande comme ci-dessous:

curl -sI -o  -w %{content_type} https://www.lemonde.fr|head -2 | cut -f2 -d »= » | tail -1

On voit que ça ne marche pas avec la commande curl -sI -o  -w %{content_type} https://www.lemonde.fr|head -2 | cut -f2 -d »= » | tail -1.

En cherchant la solution de récupération d’encodage, je fais sortir l’en-tête de url du site « lemonde » et celles de nos urls; je trouve que l’information sur content-type est sur la troisième ligne au lieu de deuxième ligne :

Donc, je remplace la commande et j’obtiens la bonne résultat:

Malheureusement, ça marche juste sur les deux sites que j’ai testé, pas pour tous les autres, voilà le résultat après l’exécution du script:

Le dernier essai est l’expression régulière, je veux chercher tout simplement l’occurrence de « content-type » et les séquences de caractères qui suivent.

Ça ne fonctionne pas pour toutes les urls. Quand je teste séparément, il me donne la bonne résultat si je place le fichier « resultat » de l’output de l’en-tête de url dans le même répertoire de ce script, ici, c’est test_grep.sh, comme représenté ci-dessous:

Mais pour toutes les urls, il me donne pas les bonnes encodages.

—————————————————————————————————————————————

Continuons …

Comme illustré le résultat ci-dessus, j’ai testé deux fois avec l’expression régulière, la première fois m’indique que grep: resultat: no such file or directory; Donc, j’ai placé le fichier resultat dans le même répertoire que le script, et je l’exécute, la ligne de commande donne la bonne résultat. Ce genre d’erreur de chemin me fait penser à vérifier le chemin dans le script programme_tableau.sh.

Au début, je n’ai pas fait sortir l’en-tête de l’url dans le ficher resultat, ni afficher ce fichier après egrep et les options. c’est pour ça que quand je cherche l’occurrence « content-type » avec l’expression régulière, la commande m’indique que no such file or directory. Après la correction représenté dessous, j’ai réussi à obtenir tous les content-types.

On va affiner ce script prochainement pour avoir l’illustration plus claire et précise!

VOILÀ !

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