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

if [[ condition ]]; 
then
 echo " premier jugement"
else
 echo " deuxième jugement"
fi
prenez du temps à bien la retenir, entrainez-vous". 


Essayons-le : 
1) pour age = 13



2 ) pour age = 19


Cela est fait, en terme de syntaxe, nous avons retenu toutes les consignes. 

>>> to be continued. 




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


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

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.


















Si on exécute cette partie de code, on aura l’affichage ci-dessous:





Pourtant il faut pas oublier de fermer les balises de "body" et de "html" à la fin, sinon on vera l'erreur ci-dessous:

La raison est bien expliqué sur notre article "je m'appelle HTML".

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



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.

Comme on voit ici,  ces trois encodages sont compris dans le seul lien, dans ce cas, on va prendre le premier comme le bon.





Encodage


L'un des principaux problèmes rencontrés lors de la création de ce projet, c'est la détection  de l’encodage des pages web qu’on a récoltées. Ces dernières doivent être encodées en UTF-8 (terme que nous essayerons d’expliquer par la suite) si ce n’est pas le cas, les convertir en UTF-8.


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: 

  1. Utiliser les entités HTML (voire ce lien) pour le caractère qu'on veut insérer. ex:   î pour î.
  2. 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:  
  1. Tables Unicode
  2. Entités HTML
  3. Charset                    





>>> To be continued 





Un premier tableau : Toute une expérience

Maintenant que nous avons introduit les commandes Linux (pwd, cd, mkdir, rm, rmdir…etc.) et les balises de bases Html, il est temps de parler du script. 

I) Qu'est ce qu'un script shell?

Un script shell est une suite d'instructions  (commandes) simples et structurées permettant d'automatiser une série d'opérations.
Ces instructions se présentent sous un fichier texte et sont exécutées de manière séquentielle. En gros, un script est un programme (ensemble de ligne de commande) qu’on édite avec un éditeur de texte ( notepad++, TextWrangler…etc.) dans lequel, il y aura un ensemble de commande qu’on envoie à un interpréteur de commande (Shell par exemple) qui va lire le fichier texte(le programme) et exécuter ligne par ligne les commandes. La syntaxe est celle de l’interpréteur. 



Syntaxe: 
Un commentaire est précédé du symbole "#" sauf dans la première ligne lorsqu’il est suivi d’un point d’exclamation. Cette ligne indique à l’interpréteur (ici bash) que le code est un programme bash (les commandes sont celles reconnues par Bash.)
Nous savons maintenant que mkdir est une commande qui permet de créer un répertoire, touch qui crée un fichier vide, et écho qui affiche un contenu dans un fichier mais si nous avons à taper en ligne de commande à chaque fois qu’on veut créer des répertoires, ça deviendrait insupportable. 
Solution:
  écrire un script qu’on peut modifier à tous moment, et l’exécuter en une seule ligne de commande. par exemple: 



Pour lancer le script, il suffit de taper la commande « sh le chemin absolue ou relatif du script ». Il faut également se placer dans le bon endroit. 


Résultat: 





Bref, un script reste plus pratique pour l'exécution des commandes stocké sur la machine, accessible et modifiable à tout moment.


II) Les variables:


Une variable est le seul moyen qui permet de stocker une information dans une chaine de caractère. Cette information stockée peut être utilisé à chaque fois qu’on le souhaite en utilisant le signe dollar $. 
Pour mieux comprendre ce qu’est une variable, nous essayerons d’écrire un script qui nous permettra de jongler avec des variables.


L'exécution de ce script donnera des choses qui ressemblent à une interaction entre une machine et un utilisateur :
Ceci pour la première ligne :

ceci pour la seconde: 



Enfin, voici un aperçu commenté d'un script simple qui va faire pas mal de chose avec une seule ligne de commande sur le terminal. 



III) les boucles: 


Nous avons vu plus haut, que nous avons tendance à économiser le temps, à vouloir faire beaucoup de choses en un seul clic. Pour cela, on a pensé aux boucles notamment la boucle dite "for" qui est tellement génial qu'elle nous économise pas seulement le temps mais tellement compréhensive car elle sait que les humains en général s'ennuie à répéter la même chose à chaque fois, du coup, elle est là pour nous éviter l'ennui. Merci "for" for tous ce que tu fais pour nous. 

Syntaxe : 

for quelquechose in quelque chose
do
instructions.
done

ou 

for quelquechose in quelquechose
{
instructions.
}

Allons y, faisons des choses plus complexe. 

IV) Un tableau : 

On sait déjà écrire un tableau Html ( voire "je m'appelle html"). On  se débrouille suffisamment avec quelques commandes. On a récolté des  Urls (une cinquantaine). Maintenant, on essayera d'écrire un tableau avec deux colonnes : la première colonne  affichera le lien, la seconde affichera le numéro. Le début, on le devinera ressemblera à:

 

Voici un aperçu commenté d'une boucle : 



Une fois mon accolade ouverte, je commence à écrire mon code HTML de manière lisible: 


Maintenant qu'on a écrit ça, on ne doit absolument pas écrire l'entête du tableau à l'intérieur de la boucle sinon, on peut avoir des choses horribles (nous l'avons fait et nous le conseillons surtout pas). L'entête de notre tableau doit impérativement sans aucune négociation précéder la boucle. Notre entête qu'on peut également enrichir avec des balises simples mais qui nous rend un joli tableau. le code ressemblera à ça :



On vous présente le script complet : 



Maintenant qu'il est prêt, allons y exécutons le : 




Resultat: 



Et ce n'est que le début. 


>>> To be continued 





2 déc. 2016

Je m’appelle HTML

                               

Aujourd’hui, nous allons introduire les tableaux dans du « HyperText Markup language » abrégé et communément dit « html » soit en français « langage de balisage ». En effet, ce langage informatique fut créé dans le début des années 90 afin de structurer et donner du sens à un contenu.
Pour écrire un tableau avec du code qu’on appelle du « html » et qui signifierait avoir la possibilité de lire de l’information sur une page web à l’aide d’un navigateur quelconque. Nous essayerons d’aborder les notions les plus basiques
Tous d’abord, il faut savoir ce qu’est une balise. Une balise formellement est un symbole qui s’ouvre avec un chevron « < » et se ferme avec un chevron « > ».
Exemple: <élément>
On considère que <élément> est une balise ouvrante qui doit forcément attendre sa balise fermente qu’on écrit comme suit </élément> c’est-à-dire elle est constituée de deux paires de balises.
Il est très important, pour éviter tout éventuel erreur, de bien vérifier que toute balise ouverte a joliment quelque part une balise fermée qui lui correspond.
Il faut également noter que tout code « html » contient des balises qu’ici on nomme « incontournables » car d’une part, elles sont indispensables pour tout individu souhaitant dans le futur créer, gérer, optimiser le référencement et modifier des sites-web indépendamment des différents machin qui proposent des solutions toutes faites.
En effet, on essayera de faire un détour donc sur les balises incontournables en abordant brièvement les différents éléments qui peuvent figurer dans une balise.
Les éléments:
<html> : la balise ouvrante qui introduit le code accompagné de sa balise fermante </html> qui clôture le code.
Elle peut également contenir des informations relatives à la langue dans laquelle on va écrire le contenu.


<head> : la balise ouvrante qui introduit toute un ensemble de balises contenant des informations sur l’encodage dans la balise <meta> et le titre dans la balise <title>.
<body> : Cette balise permet d’introduire le corps du contenu : un paragraphe, un tableau…etc.

Ces trois balises s’ouvrent au début d’un script « html » et se ferment à la fin du script. On rappelle également qu’un script est un programme écrit à l’aide d’un éditeur de texte et qui s’exécute généralement avec un interpréter comme le Terminal que nous avons introduit dans ce blog précédemment. Parmi les éditeurs de texte, nous privilégions et travaillons avec TextWrangler sur un MacOs et Notepaad++ sur Windows. Bien évidement, il en existe d’autres mais les gouts ne se discutent pas.

  
la balise <table> définira le <body> de mon contenu c-à-d. le contenu dans notre page-web ici sera un tableau. Ce dernier est un ensemble de lignes et de colonnes.
<tr> : une balise ouvrante qui renvoie le sens d’une ligne dans un tableau et se ferme également </tr> qu’on peut substituer avec la balise </th>.
<td>: une balise ouvrante qui renvoie le sens d’une colonne /cellule dans un tableau et se ferme également avec la balise </td>. Pour ce qui est des cellules d’en tête, on peut utiliser la balise <th></th> qui permettra d’écrire en gras le texte dans les cellules.



Nous tenons également à rappeler que pour pouvoir exécuter ce script via Shell, nous devons impérativement indiquer dans le script dans la première ligne : #!/bin/bash où le # n’introduit pas un commentaire uniquement lorsqu’il est suivi du « ! ». Il faut également respecter la syntaxe bash : pour écrire dans un fichier on utilise, rappelons-le, la commande « echo »

Voici donc un aperçu simple du résultat:  
Nous avons également essayer d’aller plus loin, en insérant beaucoup plus de lignes. On a également utiliser une balise <a href= http:\\www.exemple.fr> dans laquelle on écrit des liens accessible en un clic, et qui se ferme comme toute autre balise avec </a>
voici le résultat:
Afin de résoudre les problèmes d’encodage, il est préférable de le noter en l’imbriquant dans la balise <head> tout comme le « title » avec la balise qui définie l’encodage:<meta charset= « utf-8"/>



voici le résultat:
En gros, voici à quoi peut ressembler un code html:




Tout comme la balise <table> qui permet d’écrire un tableau, il existe par ailleurs la des balises relatives au traitement de textes:

<h1>Notre titre</h1> : Une balise qui va permettre d’écrire des grands titre.



voici le résultat:

<p>notre paragraphe</p>: cette paire de balise permet d’écrire des paragraphe.
<em>Notre texte</em> : Cette balise est probablement d’une grande importance si l’on veut mettre en mention dans un paragraphe donnée un terme ou une expression empruntée à un autre auteur ou une prendre ses distances…etc.
<strong>Notre texte</strong> : Il se trouve que parfois, lorsqu’on rédige, on souhaite mettre l’accent sur un terme précis ou une phrase voire parfois tout un paragraphe. Pour ce faire, on utilise le gras.  





Maintenant, que la logique des balises semble claire, on a intégré les balises <em> pour l’italique, <ol> et <li> pour la numérotation.

Voici le résultat d’un code html: