mardi 12 novembre 2013

Petits problèmes de codage ???

 Hello !!


En parlant de page dumpée, vous est-il arrivé de cliquer sur la colonne concernée dans le tableau préparé pour l'exercice de création d'un tableau répertoire global de nos urls traité sur cette page ?

Eh bien moi oui , et voici ce que j'ai eu à l'écran :






Je vous passe la suite c'est du même ordre...

l'option file -i dit pourtant :

Ainsi le navigateur ne reconnait pas que la page dumpée est codée en utf-8.

"c'est bien beau tout ça mais comment je fais moi pour la lire ta page ???"

 Il reste juste à corriger cela avec les outils propres au navigateur (pour moi sur chrome : onglet paramètres→outils→codage→utf8)

Ce qui affiche :

Du beau japonais bien plus ..."lisible".

"ouf alors ce n'était que "ça" ?"

Oui et ... non , prenons maintenant un cas extrême afin de voir ce qui pourrait nous arriver dans la suite du projet.
Le cas dont je parle est présent sur :
http://www.let.osaka-u.ac.jp/~okajima/tokan.htm

(et nous le devons à Mr Perrot, on lui dira bien merci !!!)

voici ce qu'affiche la page en question :


si on "s'amuse" à faire un wget sur l'url et à scruter le fichier avec la loupe file -i on obtient :


on espère donc lire le codage dans l'entête du code html on fait donc un head du fichier ce qui donne le résultat navrant de :


Ici pas de solution ... sinon que notre propre connaissance en japonais nous permet de dire qu'il s'agit d'un codage japonais (shift-JIS, EUC-JP,...), ceci car le titre du fichier tokan ou 東関 évoque directement un nom japonais...

Faisons un petit test avec le shift-JIS à l'aide du navigateur comme tout à l'heure, et fort heureusement on obtient :


Nettement plus lisible ... (enfin tout est relatif)

Bonne soirée à tous !!!

lundi 11 novembre 2013

Un script bash pour établir une page HTML avec un tableau récapitulatif d'URLs et autres pages aspirées ou dumpées ça vous dit ????

Bonjour à tous,

Après plusieurs plantages système (réinstallation,... etc) je me décide à réécrire un petit article.

Le but ? Tout est dans le titre … nous allons générer un script bash permettant de construire une page HTML qui répertorie dans un tableau les URLs que nous avions sélectionnées pour le projet.

Mais ne perdons pas plus temps entrons tout de suite dans le vif du sujet :


Tout d'abord les lignes classiques de préparation :

Ensuite pour ne pas avoir à taper plusieurs fois le chemin d'accès à nos différents fichiers (ce qui aurait été un peu rébarbatif) on a prit soin de créer un fichier "chemin".
La réflexion entourant ce "chemin" n'est pas transcendante, néanmoins il faut quand même avoir en tête l'architecture du projet, car les erreurs sont si vite arrivées ...
Ainsi En partant du dossier  PROGRAMMES qui est notre point de départ il faut remonter d'un dossier dans l'arborescence avant de redescendre à nouveau dans un autre dossier. 
La conséquence est que le fichier chemin a la forme suivante :
../URLS/liste_url_nourriture_jap
../TABLEAUX/liste_urls_tableaux.html
→ le fichier liste liste_url_nourriture_jap est notre fichier d'URLs situé dans le dossier URLS , il existe déjà et contient 50 URLs.
→le fichier liste_urls_tableaux.html lui n'existe pas, il sera notre résultat, la page html créée pour contenir nos résultats.

Commençons à écrire le script bash !!!!
D'abord on tiens à faire appel à notre fichier chemin en entrée ce sera le rôle des lignes suivantes :

 Ainsi on stocke dans les variables fic et tablo le contenu de nos chemins, la commande read se chargeant de lire ligne à ligne par assimilation à notre flux d'entrée puis de faire le stockage.

Vient ensuite le moment d'écrire notre tableau :

On a  prit soin d'insérer un intitulé et des titres pour les colonnes ( note : on a volontairement coupé le code afin de le rendre lisible) et d'établir une balise meta qui va créer une page HTML codée en UTF8.

Ensuite on doit automatiser les taches suivantes, cela car il faudra reproduire la même action pour les 50 urls et à chaque fois les stocker dans le tableau :
étape 4,5,6 et 7 à chaque fois annotée
Création du compteur :
Initialisation de la boucle :
Ecriture dans le tableau et référencement des objets :
Fin de la boucle et fin de l'écriture du tableau :

Reste à lancer dans le terminal :

 et on obtient 50 fois :
mais surtout le résultat final :



Bonne soirée et à bientôt !!!!

Joe 


lundi 4 novembre 2013

Perl, expressions régulières


EXPRESSIONS RÉGULIÈRES, POUR RECHERCHER DANS UN TEXTE  ET PRODUIRE UN CERTAIN RÉSULTAT


Détection

 - Une expression régulière est composée d'un motif qui est l'objet chaîne de caractères à détecter.

- Pour signaler un motif avec Perl, on l'encadre par deux slashs. / /

exemple :

#!/usr/bin/perl;
@ARGV = ("Entree.txt");
while (<>) {
   if (/aaa/) {

-- Permet de détecter "aaa" dans le texte en entrée.


- L'astérisque est un facteur multiplicatif : placé derrière un élément, il indique que cet  élément peut se trouver de 0 à x fois x quelconque.

exemple :

ab*a

reconnaîtra

aa
aba
abba
ab....ba

Le "+" excepte 0.

Le "?" comprend 0 ou 1 fois.

On peut aussi préciser un certain nombre de foise entre accolades.

exemple :

ab{2,3}a

-- Identifie les chaînes "abba" et "abbba".


- Le point . est un joker : il peut représenter n'importe quel caractère à l'exception du retour chariot "\n".


- Les crochets [] permettent de définir un ensemble de cartactères. On insère les caractères de l'ensemble à représenter à l'intérieur.


exemple :

[az] dénote l'ensemble {a,z}.

Notez que le tiret - permet de définir un intervalle donc un certain ensemble.


exemple :

[a-z] dénote l'ensemble {a, ... , z}


Classes prédéfinies avec Perl et particulièrement intéréssantes pour notre projet...

\D tout sauf un chiffre
\w tout sauf les caractères spéciaux.



Modification

Quand on a trouvé notre cible, on peut vouloir la modifier.


- Substituer avec 's' placé devant le motif à détecter, plus le motif nouveau.


exemple :

#!/usr/bin/perl;
@ARGV = ("Entree.txt");
while (<>) {
  if (s/ab*b/XXXX/) {

-- Recherche la chaîne "ab{x fois, x quelconque}" dans le fichier texte "Entree.txt" et la remplace par "XXXX".


mardi 15 octobre 2013

Perl, manipulation des fichiers texte et du contenu.


Hé hé hé !!!

L'utilisation de Perl est justifiée par la faible quantité de données de nos corpus alliée à la simplicité syntaxique de Perl travailler sur les données textuelles.

Il ne s'agit pas ici d'un tutorial Perl général, plutôt l'utilisation de Perl dédiée à notre projet.


Entrées/Sorties Fichier Texte

Débutons par les entrées/sorties fichier avec Perl. Nous allons travailler sur des fichiers textes, donc voici la manipulation de ceux-ci via Perl.


OUVRIR LE FICHIER TEXTE POUR ACCÉDER À SON CONTENU

- ouverture en interne, fichier à traiter indiqué à l'intérieur du script.





° Fonction open() : premier argument, nom du flux à ouvrir et
second argument, chemin vers le fichier texte. Retourne un flux vers le fichier.

 Pour écrire dans le fichier, ouvrir EN ÉCRITURE, indiquer ">" devant le fichier.

° Utiliser alors la fonction print FLUX string pour écrire avec ce même flux.


- ouverture externe, fichier  à traiter indiqué en argument du script

° On utilise l'opérateur diamant <> pour récupérer l'argument en entrée

while ($ligne = <>) { --> exemple d'utilisation dans une boucle "while", lecture ligne par ligne. Chaque ligne est ici enregfistrée dans la variable $ligne ; donc une nouvelle ligne à chaque tour de boucle.
La boucle s'arrête lorsqu'il n'y a plus rien à lire.

Deux variables magiques : $_ est la valeur de la ligne courant et $. est le numéro de la ligne courante.


° Aussi, conventionnellement est défini @_ qui contient la liste des arguments. $_[] permet d'accéder à un élément de cette liste.

Par exemple, $_[0] est le premier élément donné en argument.







L'ouverture permet d'atteindre le contenu texte de notre fichier.
Ce qui nous intérèsse c'est la manière dont on va traiter ce contenu textuel, voici les fonctions usuelles et utiles à cet égard.


TRAITEMENT DU CONTENU TEXTUEL


° Fonction split() : premier argument, expression régulière notée entre // permettant de définir la délimitation, second argument chaîne de caractères à découper.

Exemple

$cible = "Un Deux Trois Quatre";
@table = split(/ /g,$cible);

Ici on récupère le tableau table les différentes séquences issues du découpage de cible avec l'espace pour délimiteur. Retourne la liste de séquences si affectation à une liste @ ou le nombre de séquences si affectation à un scalaire $.

Ainsi, on obtient :

$table[0] : "Un"
$table[1] : "Deux"
etc.

° Concaténation de deux chaînes de caractères avec l'opérateur .

Exemple

$a = "moi"
$b = "je"
$a . $c -> "moi je"

° opérateur répétition x

Exemple "a" x 3 -> "aaa"

° Majusculer up() et minusculer lc() : texte à modifier en argument.

° Fonction index() vérifie si une chaîne de caractères est contenue dans une autres ; premier argument, la sous-chaîne et second argument, la chaîne.
Renvoie -1 si faux, 0 si vrai.

Permettra notamment de compter le nombre d'ouccurences d'une certaine expression d'un texte.


° Fonction length() permet de donner la taille d'une chaîne de cacaractères.
Un argument : une chaîne de caractères. Renvoie l'entier correspondant à la taille.



FERMETURE FICHIER

Après avoir traité les données, penser à fermer le flux ouvert précédemment.

° Fonction close() : un argument, le nom du flux donné dans open(). <> si ouverture externe, via entrée standard.


Nous verrons dans le prochain article un peu plus profondémment l'utilisation des expressions régulières.




Kévin Deturck











dimanche 13 octobre 2013

Premier envol théorique

Bonjour à tous !


À l'approche de la date fatidique à laquelle il faudra avoir finalisé la création de ce blog, et défini le sujet sur lequel nous allons orienter notre travail au sein de ce projet encadré, un billet introductif s'impose.


Nous sommes Johan, Kevin et Diane, trio formé dans le cadre du "Projet Encadré" dépendant du Master 1 TNM 2013-2014, de l'INALCO et Paris 3. Ici Diane, qui rédige présentement ce billet pour vous permettre de comprendre les directions que vont prendre notre projet.


Le but de ce projet étant de développer une recherche basée sur des corpus de textes multilingues, à l'aide de moyens informatiques qui nous seront enseignés au court de l'année, nous avons trouvé judicieux de choisir un sujet pluridimensionnel et vaste, nous permettant différentes approches possibles.


Venant tous les trois de parcours différents, pas tous de l'INaLCO, ayant des goûts relativement éclectiques, nous avons exclu d'office l'idée de travailler sur un sujet purement linguistique. Nous avions plein d'idées en tête, notamment celle de travailler sur des icônes internationales, cela nous offrant un angle d'attaque extrêmement vaste. Mais le fait de devoir construire des corpus multilingues posait problème à certains égards. Me concernant, désireuse de travailler sur un corpus en indonésien, je me suis retrouvée confrontée à l'impossibilité de trouver suffisamment de textes en indonésien, la grande majorité de ceux-ci étant en anglais (dans un souci de communication avec l'étranger, très certainement). Ensuite, les sujets récents ou d'actualités à partir desquels je trouvais suffisamment de textes en langue mère, n'étaient pas compatibles avec les langues étudiées par Kevin et Johan. C'est pourquoi, ces contraintes imposées par l'indonésien nous ont obligés, tous les trois, à trouver un sujet universel possédant des caractéristiques propres à chaque région du globe: l'alimentation.


Le titre que nous avons donc décidé de donner à ce projet est le suivant: De la langue au palais, étude multidimensionnelle des comportements alimentaires sur les cinq continents. (Notez le jeu de mots. Il faut savoir faire les choses avec passion et méticulosité!)
Sujet à première vue rébarbatif, il est en fait passionnant à plusieurs niveaux.
D'abord, il nous a permis, lors de la construction des corpus de textes, d'apprendre énormément de vocabulaire de chacune des langues sur lesquelles nous travaillerons. Ensuite, les comportements alimentaires sont le miroir de nombreux paramètres qui n'en sont pas moins passionnants: 
- Le climat (Consommation omniprésente de tel ou tel produit, car climat favorable? Ou importation? Etc.),
- L'économie (Pays en crise, donc aliment omniprésent car peu cher? Etc.),
- L'histoire (Aliment omniprésent car historiquement présents sur le territoire? Ou importation issue des anciennes colonies et habitude gardée?),
- Les comportements sociaux (En fonction de nos connaissances personnelles sur chacun des pays étudiés, quelles conclusions peut-on faire sortir des occurrences majoritairement pointées par nos outils informatiques?),
- La géographie (Par exemple, pourquoi une variété peu élevée d'aliments sort de nos résultats? Est-ce une région dont les ressources terriennes sont difficilement exploitables? Sujet croisé avec le climat. Etc.)
- Etc.


Pour illustrer cette recherche, Johan, Kevin et moi avons décidé de construire des corpus de langues internationales et représentatives de chacun des continents.
Kevin construira deux corpus de langues:
- (1) En anglais, focalisé sur les habitudes alimentaires d'Amérique de Nord,
- (2) En français, focalisé sur les habitudes alimentaires des pays d'Afrique noire francophones.
Johan construira un corpus de textes:
- (3) En japonais, focalisé sur les habitudes alimentaires dudit pays.
Pour finir, je travaillerai sur un corpus de textes:
- (4) En espagnol, focalisé sur les habitudes alimentaires d'Amérique Latine, ainsi que sur un corpus en,
- (5) indonésien, focalisé sur les habitudes alimentaires d'Indonésie.
Si cela est possible, j'essayerai également de former un corpus en malais.


Nous espérons que cette étude vous passionnera tout autant qu'elle nous passionne pour l'instant.

Merci de votre lecture et à bientôt.


Diane pour le groupe.

Retour à l'Accueil
Retour à Théorisation du projet tenants et aboutissants

Un peu d'HTML ???

Pour satisfaire à un petit exercice demandé en cours nous allons faire ici une petite page HTML toute simple visant à afficher un tableau avec nos noms et le thème du projet. Une fois le texte tapé cela donne ça :

Ce qui bien sûr, le fichier texte une fois ouvert par votre navigateur préféré sera interprété comme ceci :

Restera à initialiser cela avec un script bash et à expliciter les balises, ce que nous nous chargerons de faire ultérieurement.

A+
Joe

Retour à Exercices
Retour à l'Accueil

samedi 12 octobre 2013

Comment compter les fichiers d'un dossier avec une/des commande(s) bash ?

Hello !

Pour répondre à une petite interrogation qui était de savoir comment compter les fichiers présents dans un dossier.
Nous allons ici utiliser deux commandes à savoir find et wc.

Tout d'abord on se place dans le fichier Bureau qui sera notre base de travail du jour et on affiche son contenu avec ls comme ceci :






Nous constatons la présence de deux dossiers – test1 et test2.

Si on tape la commande find avec pour argument -type f – fichier ; on demande à trouver les types de fichiers présents dans le dossier Bureau ou nous nous trouvons. Ce qui affiche :



Reste à utiliser wc (word count) avec l'argument -l (pour ligne) afin d'obtenir le décompte.



« Oui mais moi je veux juste le décompte du fichier test2 ... »

Aucun problème, il suffit de taper le chemin en début de commande, après find.



Voilà, je pense que cette question est résolue.

A+ Joe



Pour retourner à la page des Exercices
Pour retourner à l'Accueil