
Ce blog créé par des étudiants en Master1 "Traitement Automatique des Langues", a été conçu exclusivement pour les comptes-rendus du cours intitulé "Programmation et projet encadré" animé par des enseignants de Paris 3 Sorbonne nouvelle et de l'INALCO. Ce blog est donc une interface entre nous, qui sommes étudiants, et les enseignants.
Translate
29 déc. 2016
L'inoubliable " if "
Tous les langages de programmation se ressemblent mais pas vraiment. En fait, comme nous avions travaillé un peu sur python (Cours de programmation & Algorithme). Nous avions découvert, pour la première fois, ce qu'on appelle le "if" donc un moyen d'exprimer formellement la condition. Malgré que nous avions compris le fonctionnement et avions réussi à coder avec python mais nous avions complètement oublié qu'il ne partage pas la même syntaxe avec Shell Unix. En effet, Nous ne devrions pas oublié. Désormais, on oubliera plus jamais. Nous avions retenu qu'il y a bien ce qu'on appelle un manuel (livre sacré d'un programmeur) qui, pour notre cas, confondions deux langages, était l'ange sauveteur. Il nous a dit "figurez-vous, mes chers, que le mot "then" est important même si ça ne l'est pas sur PYTHON. Les deux crochets sont les anges gardien de votre condition, aimez-les. le "fi" à la fin fera le bonheur de votre "if" au début. L'espace qui n'a pas de sens sur python, réfléchissez-y sur Unix, ça vous fera du bien, je vous assure. Enfin, je vous propose cela
REGEX
Qu’est-ce qu’une expression régulière ?
Une expression rationnelle ou expression normale1 ou expression régulière, est, en informatique, une chaîne de caractères, que l’on appelle parfois un motif, qui décrit, selon une syntaxe précise, un ensemble de chaînes de caractères possibles. Les expressions rationnelles sont issues des théories mathématiques des langages formels des années 1940. Leur capacité à décrire avec concision des ensembles réguliers explique qu’elles se retrouvent dans plusieurs domaines scientifiques dans les années d’après-guerre et justifie leur adoption en informatique. Les expressions rationnelles sont aujourd’hui utilisées par les informaticiens dans l’édition et le contrôle de texte ainsi que dans la manipulation des langues formelles que sont les langages de l’informatique.
Application
1)Rechercher /remplacer des séquences spécifiques dans des textes ou des corpus
en formulant un patron(motif)
2)Dans les outils de traitement de texte
Les concordances par exemple permettent en générale des requêtes par expressions régulières
application avec Antconc, le Trameur
cf cours de Tal
La limite des recherches classiques
Imaginons que l'on a un texte avec plusieurs mots « Bonjour », et que nous voulons rechercher seulement le premier mot « Bonjour » qui se trouve au début du texte, dans ce cas, nous ne pouvons pas realiser ceci avec la recherche traditionnelle.
Syntaxe
Caractères alternatifs
opérateur: [ ]
m[oai]t signifie sélectionner les parties du texte où il y a un m, suivi d’une lettre qui est soit o, soit a, soit i, suivi d’un t
Chaînes de caractères alternatives
opérateur : |
m[oai]t=mot|mat|mit
par exemple on va chercher Bonjour ou Salut
Bonjour | Salut
La négation
opérateur: [^ ]
m[^oai]t signifie sélectionner les parties du texte où il y a un m, suivi d’une lettre qui n’est pas un o, ni a, ni i, suivi d’un t
Délimiteurs de chaînes
Les caractères de début de chaîne
opérateur: ^
^Bonjour sert à sélectionner seulement le mot Bonjour se trouvant au début du texte.
Les caractères de fin de chaîne
opérateur: $
bye$
\w caractère de mot
\b frontière de mot
opérateur: . le symbole . remplace n’importe quel caractère (caractère joker)
opérateur:\ anti-slash utilisé comme barre d'échappement et de
déspécialisation
Quantificateur
opérateur:? représente 0 ou 1 occurrence de l‘expression qui précède
opérateur: * 0 ou plus occurrences de l’expression qui le précède
opérateur: + au moins une occurrence
opérateur: {} lo{1,3}ng long, loong, looong
Photo cf https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres
Les opérateurs s ́organisent selon des niveaux de priorité :
fermeture * > concaténation > union |
[a-z0-9._-] signifie les lettre, chiffres, tirets, underscores possible dans l’adresse mail
Exercices(à corriger)
1.Les mots commençant par polit-
polit [a-z] *
2.Les mots finissant âr -isme
[a-z] *isme
3.Les formes du verbe écrire
écri[st(vons)(vez)(vent)]
4.Les déclinaisons des verbes finissant par -er/ir
[e (es)(e)(ons)(ez)(ent)]
[st(ssons)(ssez)(ssent)]
5.Adresses email
[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}
[a-z0-9._-] signifie les lettre, chiffres, tirets, underscores possible dans l’adresse mail
+pour dire qu’il y a au moins un caractère dans le chrochet
{2,}une suite de lettres, chiffres, points, tirets, au moins deux fois
Script de Séance4
I Comment le programme s'exécute
Au bout d'une cinquantaine de liens URL collectés manuellement, nous sommes censé obtenir un tableau qui contient 8 huit colones pour chaque langues étudiées.
1)Lire depuis un fichier les listes d'URL et mettre les résultats dans le fichier_tableau
1)Lire depuis un fichier les listes d'URL et mettre les résultats dans le fichier_tableau
D’abord, les commandes "read" et "echo" nous permettent de lire des paramètres, $ est pour renvoyer la valeur de variable dans "read", DOSSIERURLS est input et fichier_tableau est output.
2)Régler l'affichage des tableaux
La deuxième partie est pour l’affichage des tableaux, il faut mettre compteur "cptableau=1" avant le boucle, et on va commencer le premier boucle pour traiter chaque fichier dans le dossier.
La deuxième partie est pour l’affichage des tableaux, il faut mettre compteur "cptableau=1" avant le boucle, et on va commencer le premier boucle pour traiter chaque fichier dans le dossier.
Pourtant il faut pas oublier de fermer les balises de "body" et de "html" à la fin, sinon on vera l'erreur ci-dessous:
3)Aspirer des pages associées aux URLS avec "curl" et détecter leur encodage
si E=UTF8
sinon on fais rien
4)faire ceci pour chaque liste d'URL
4)faire ceci pour chaque liste d'URL
II Tester et améliorer les script
Voici le tableau en chinois

Il y a pas mal de liens sans résultat pour les DUMP initial et CONTEXTE UTF-8, pour résoudre ce problème, on va voir plus de détails sur chaque lien, on prend lien n°2 comme exemple

Ici, on voit bien que le lien2 est encodé en UTF-8, voici pourquoi ceci n'était pas affiché correctement sur le tableau:
Quand bash ne trouve pas les informations correspondantes, il affichera vide,"ECRITURE RESULTAT dans le tableau", évidemment la commande "curl" n'est pas suffisante pour traiter tous les liens, on va essayer avec "egrep" afin d'afficher les encodages.
Encodage
Qu’est ce que UTF-8?
On ne peut pas aborder la notion d’UTF-8 sans passer d’abord par la notion l’ASCII et de l'UNICODE.
L’ASCII (American Standard Code for Information Interchange) est un standard américain, utilisé par la plupart des ordinateurs dans le monde, il permet d’associer à chaque caractère ou symbole un numéro. Ces numéros comme on peut le voir sur allant de 0 à 127
Ces numéros comme on peut le voir, sont compris entre 0 et 127. Les numéros inférieur à 33 correspondent aux caractères non-imprimables ce qu'on appelle aussi des codes de contrôle, ils ne s'affichent pas à l'utilisateurs: par exemple le code 10 permet de revenir à la ligne, 32 pour l'espace entre les mots etc. Pour écrire un h minuscule il faut utiliser le nombre 104, pour un J majuscule il faut le nombre 74 et ainsi de suite.
Mais un problème se pose, la table ASCII ne comprend pas les caractères accentués tels que les é, à, è, on a donc inventé l'UNICODE.
UNICODE permet de représenter tous les caractères spécifiques aux différentes langues. Au contraire de l'ASCII, au lieu d'utiliser des codes allant de 0 à 127, il utilise des codes encore plus grands. On retrouve alors des caractères latins (accentués ou non accentués), grecs, arméniens, arabes, hébreux, hiragana etc
Voici donc un exemple de la table de l'arabe sur Unicode:
N'oublions pas de mentionner qu'un caractère d'Unicode prend 2 octets donc deux fois plus de place qu'en ASCII ce qui fait qu'ASCII est beaucoup plus répandu qu'Unicode.
Sachant que la plupart des caractères dans la langue française sont des caractères présents dans l'ASCII, et que les caractères accentués représentent une petite partie seules nécessitent l'Unicode, on a donc pensé à une solution: UTF-8 !
UTF-8 (Universal Character Set Transformation Format - 8 bits) est un codage de caractères très répandu vu sa simplicité: il est codé de 8 à 32 bits ce qui permet de coder un grand nombre de caractères. Il est partout en ASCII et dès qu'on a besoin d'un caractère d'Unicode on utilise un caractère spécial signalant que ce caractère là n'est pas de l'ASCII mais de l'Unicode (on reviendra sur ce point dans la suite de cet article).
Pourquoi avons-nous besoin de pages web en UTF-8?
Comme on l'a mentionné précédemment, l'encodage en UTF-8 prend en compte tous les caractères qui peuvent exister sur le web, et la totalité des navigateurs et des éditeurs de textes le prennent en compte, cela évite ainsi les problèmes d'affichage de caractères dans les textes. Sachant que notre but est d'extraire les textes des URLS récoltés et effectuer des traitements de textes dessus, il faut alors que tous les caractères soient affichés correctement pour permettre l'exploitation de ces ressources, alors la meilleure solution reste celle de convertir tous ces liens en UTF-8 en passant par le détection de l'encodage de chaque URL.
Comment détecter et convertir l'encodage des pages web?
Pour détecter l'encodage d'une page web sur le terminal, on doit d'abord utiliser la commande CURL pour avoir le code retour HTTP. (De manière général, CURL permet de faire des requêtes sur un serveur web via un des protocoles qu'il supporte.)
Les codes HTTP correspondent à des codes de statuts du protocol HTTP l'H'yperText Transfer Protocol, protocole de transfert hypertexte en français, qui permet à un serveur web de transmettre des informations et des pages à un client ou un navigateur web, ces codes sont composés de trois chiffres grace à eux on peut analyser le statut de la page web. Le code 404 par exemple signifie que la page demandée n'existe pas alors que le code 202 signifie que la requête a été réalisée avec succès.
On va pas trop se pencher vers ces code dans notre article, mais ce qui nous intéresse le plus c'est le Charset donné par la requête:
A l'aide de la commande CURL -i , on a pu alors avoir une information située dans ce qu'on appelle le Charset où c'est mentionné l'encodage de la page (UTF-8 pour notre exemple). Charset veut dire l'ensemble des caractères.
Problème
Sur une page web, pour insérer des caractères spéciaux qui ne sont pas comprises sur ASCII, les administrateurs de cette page ont trois choix:
- Utiliser les entités HTML (voire ce lien) pour le caractère qu'on veut insérer. ex: î pour î.
- Ecrire le caractère tel qu'il est et préciser son encodage au Charset dans la balise <head> ex:
<meta charset="UTF-8">
.
3. Travailler directement en UTF-8 sur l'éditeur HTML.
L'un des problèmes qu'on peut rencontrer, c'est le faite que la personne qui a créée le site web a déclaré un faux encodage au Charset, ce qui complique la tâche de détection et de conversion.
On expliquera par la suite dans un article plus détaillé le processus de détection et de conversion de l'encodage des pages web.
Liens utiles:
>>> To be continued
Inscription à :
Articles (Atom)