Quentin Lamouroux - Typoem : Différence entre versions
(Page créée avec « Typoem = typography + poems. Terme inventé par Hansjorg Mayer, poète "concret". Typoem est la première expérimentation d'un programme qui génère de manière aléato... ») |
|||
(75 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | Typoem = typography + | + | = Le projet = |
+ | Typoem = typography + poem. Terme inventé par [https://de.wikipedia.org/wiki/Hansj%C3%B6rg_Mayer Hansjorg Mayer], considéré comme un représentant important de la poésie concrète et expérimentale. | ||
− | Typoem est la première expérimentation d'un programme qui génère de manière aléatoire des poèmes à partir d'une base de donnée connectée à une | + | Typoem est la première expérimentation, réalisée à partir du langage Linux (terminal), d'un programme qui génère de manière aléatoire des poèmes constitués à partir d'une base de donnée (de mots) connectée à une messagerie personnelle telle que Messenger. |
+ | |||
+ | Cette première entrée en matière part d'une fonction proposée par Facebook qui permet de télécharger l'ensemble de ses données (messages, posts, likes, etc) au format .json. Je m'intéresse ici au data messenger et aux messages envoyés et reçus. | ||
+ | |||
+ | |||
+ | = Le processus = | ||
+ | |||
+ | |||
+ | [[Fichier:typoem1.png|200px|Étape 1]] | ||
+ | [[Fichier:typoem2.png|200px|Étape 2]] | ||
+ | [[Fichier:typoem3.png|200px|Étape 3]] | ||
+ | [[Fichier:typoem4.png|200px|Étape 4]] | ||
+ | [[Fichier:typoem5.png|200px|Étape 5]] | ||
+ | |||
+ | |||
+ | |||
+ | '''Première étape''': cette étape consiste a comprendre la structure du fichier json et de le nettoyer grâce aux fonctions du terminal. La fonction "cat monfichier.json" permet de charger le fichier et d'afficher son contenu. | ||
+ | |||
+ | '''Deuxième étape''': j'utilise la fonction "grep content monfichier.json > monfichier2.json" pour que le terminal affiche seulement les lignes contenant "content" qui est la balise qui contient les messages envoyés. Puis j'exporte ce nouveau contenu dans un nouveau fichier .json. | ||
+ | |||
+ | '''Troisième étape''': j'utilise la fonction ''cat monfichier2.json | tr " " "\n" | tr [:upper:] [:lower:] | sort | uniq > monfichier3.json'' qui va trier le fichier en mettant les mots par ordre alphabétique, en le mettant à la ligne, en supprimant les doublons, et mettant tous les mots en bas de casse. | ||
+ | |||
+ | '''Quatrième étape''': j'utilise la fonction ''tr -s '"' < monfichier3.json > monfichier4.json'' pour supprimer la ponctuation '""' qui fait parti de la structure du fichier .json de base et qui pourrait brouiller la lisibilité des poèmes. | ||
+ | |||
+ | '''Cinquième étape''': j'utilise la fonction ''cat monfichier4.json | tr " " "\n" | uniq | gshuf | tr "\n" " " | cut -c-3000 > monfichier5.json'' pour générer un texte de 3000 lettres en combinant les mots aléatoirement (issus du fichier monfichier4.json), et l'exporte dans un nouveau fichier monfichier5.json. | ||
+ | Shuf (ou gshuf pour les macs) remélange aléatoirement la liste des mots, cut coupe le texte après 3000 lettres. | ||
+ | |||
+ | |||
+ | |||
+ | = Document = | ||
+ | |||
+ | [[Fichier:typoem_doc1.png|300px]] | ||
+ | [[Fichier:typoem_doc2.png|300px]] | ||
+ | [[Fichier:typoem_doc3.png|300px]] | ||
+ | |||
+ | |||
+ | |||
+ | Le processus est appliqué à 3 conversations différentes. Chaque étape de l'expérimentation est archivée sur une page html [en local sur ma machine] faisant appel au langage php pour charger les fichiers .json générés avec le terminal. | ||
+ | De cette manière je tente d'une part de montrer un aperçu global du chantier, de respecter l'esthétique brute des fichiers .json originaux et du language Linux; et d'autre part de constituer une preuve ou un témoignage de ce qui a été entrepris de faire. | ||
+ | |||
+ | Une des problématiques rencontrées a été de traduire le langage Unicode des fichiers .json [qui n'a pas été une mince affaire]. | ||
+ | Je pose ici le code qui a été utilisé pour traduire les caractères Unicode via php : | ||
+ | |||
+ | <pre> | ||
+ | |||
+ | <?php | ||
+ | function fixBadUnicodeForJson($str) { | ||
+ | $str = preg_replace_callback( | ||
+ | '/\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})/', | ||
+ | function($matches) { return chr(hexdec("$1")).chr(hexdec("$2")).chr(hexdec("$3")).chr(hexdec("$4")); }, | ||
+ | $str | ||
+ | ); | ||
+ | $str = preg_replace_callback( | ||
+ | '/\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})/', | ||
+ | function($matches) { return chr(hexdec("$1")).chr(hexdec("$2")).chr(hexdec("$3")); }, | ||
+ | $str | ||
+ | ); | ||
+ | $str = preg_replace_callback( | ||
+ | '/\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})/', | ||
+ | function($matches) { return chr(hexdec("$1")).chr(hexdec("$2")); }, | ||
+ | $str | ||
+ | ); | ||
+ | $str = preg_replace_callback( | ||
+ | '/\\\\u00([0-9a-f]{2})/', | ||
+ | function($matches) { return chr(hexdec("$1")); }, | ||
+ | $str | ||
+ | ); | ||
+ | return $str; | ||
+ | } | ||
+ | |||
+ | function textConverter($str){ | ||
+ | $str = utf8_decode(fixBadUnicodeForJson($str)); | ||
+ | return $str; | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | |||
+ | |||
+ | |||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | |||
+ | <head> | ||
+ | <meta charset="UTF-8"> | ||
+ | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
+ | <title>Typoem</title> | ||
+ | |||
+ | </head> | ||
+ | |||
+ | <body> | ||
+ | |||
+ | <div id="div4"> | ||
+ | |||
+ | <?php | ||
+ | |||
+ | error_reporting(E_ALL); | ||
+ | ini_set('display_errors', 1); | ||
+ | |||
+ | $json = file_get_contents("src/estelle/estelle.json"); | ||
+ | |||
+ | $json_data = json_decode($json); | ||
+ | |||
+ | foreach($json_data->messages as $message){ | ||
+ | if($message->sender_name == 'Quentin Lamouroux'){ | ||
+ | echo '<div>'.textConverter($message->content).'</div>'; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | ?> | ||
+ | |||
+ | </div> | ||
+ | |||
+ | </body> | ||
+ | |||
+ | </html> | ||
+ | |||
+ | |||
+ | </pre> |
Version actuelle datée du 18 décembre 2018 à 15:24
Le projet
Typoem = typography + poem. Terme inventé par Hansjorg Mayer, considéré comme un représentant important de la poésie concrète et expérimentale.
Typoem est la première expérimentation, réalisée à partir du langage Linux (terminal), d'un programme qui génère de manière aléatoire des poèmes constitués à partir d'une base de donnée (de mots) connectée à une messagerie personnelle telle que Messenger.
Cette première entrée en matière part d'une fonction proposée par Facebook qui permet de télécharger l'ensemble de ses données (messages, posts, likes, etc) au format .json. Je m'intéresse ici au data messenger et aux messages envoyés et reçus.
Le processus
Première étape: cette étape consiste a comprendre la structure du fichier json et de le nettoyer grâce aux fonctions du terminal. La fonction "cat monfichier.json" permet de charger le fichier et d'afficher son contenu.
Deuxième étape: j'utilise la fonction "grep content monfichier.json > monfichier2.json" pour que le terminal affiche seulement les lignes contenant "content" qui est la balise qui contient les messages envoyés. Puis j'exporte ce nouveau contenu dans un nouveau fichier .json.
Troisième étape: j'utilise la fonction cat monfichier2.json | tr " " "\n" | tr [:upper:] [:lower:] | sort | uniq > monfichier3.json qui va trier le fichier en mettant les mots par ordre alphabétique, en le mettant à la ligne, en supprimant les doublons, et mettant tous les mots en bas de casse.
Quatrième étape: j'utilise la fonction tr -s '"' < monfichier3.json > monfichier4.json pour supprimer la ponctuation '""' qui fait parti de la structure du fichier .json de base et qui pourrait brouiller la lisibilité des poèmes.
Cinquième étape: j'utilise la fonction cat monfichier4.json | tr " " "\n" | uniq | gshuf | tr "\n" " " | cut -c-3000 > monfichier5.json pour générer un texte de 3000 lettres en combinant les mots aléatoirement (issus du fichier monfichier4.json), et l'exporte dans un nouveau fichier monfichier5.json. Shuf (ou gshuf pour les macs) remélange aléatoirement la liste des mots, cut coupe le texte après 3000 lettres.
Document
Le processus est appliqué à 3 conversations différentes. Chaque étape de l'expérimentation est archivée sur une page html [en local sur ma machine] faisant appel au langage php pour charger les fichiers .json générés avec le terminal. De cette manière je tente d'une part de montrer un aperçu global du chantier, de respecter l'esthétique brute des fichiers .json originaux et du language Linux; et d'autre part de constituer une preuve ou un témoignage de ce qui a été entrepris de faire.
Une des problématiques rencontrées a été de traduire le langage Unicode des fichiers .json [qui n'a pas été une mince affaire]. Je pose ici le code qui a été utilisé pour traduire les caractères Unicode via php :
<?php function fixBadUnicodeForJson($str) { $str = preg_replace_callback( '/\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})/', function($matches) { return chr(hexdec("$1")).chr(hexdec("$2")).chr(hexdec("$3")).chr(hexdec("$4")); }, $str ); $str = preg_replace_callback( '/\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})/', function($matches) { return chr(hexdec("$1")).chr(hexdec("$2")).chr(hexdec("$3")); }, $str ); $str = preg_replace_callback( '/\\\\u00([0-9a-f]{2})\\\\u00([0-9a-f]{2})/', function($matches) { return chr(hexdec("$1")).chr(hexdec("$2")); }, $str ); $str = preg_replace_callback( '/\\\\u00([0-9a-f]{2})/', function($matches) { return chr(hexdec("$1")); }, $str ); return $str; } function textConverter($str){ $str = utf8_decode(fixBadUnicodeForJson($str)); return $str; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Typoem</title> </head> <body> <div id="div4"> <?php error_reporting(E_ALL); ini_set('display_errors', 1); $json = file_get_contents("src/estelle/estelle.json"); $json_data = json_decode($json); foreach($json_data->messages as $message){ if($message->sender_name == 'Quentin Lamouroux'){ echo '<div>'.textConverter($message->content).'</div>'; } } ?> </div> </body> </html>