<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://curlybraces.be/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dorian</id>
	<title>{} - Contributions de l’utilisateur [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://curlybraces.be/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dorian"/>
	<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/Sp%C3%A9cial:Contributions/Dorian"/>
	<updated>2026-04-04T05:34:08Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.35.10</generator>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3256</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3256"/>
		<updated>2019-05-12T16:06:47Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, et je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est donc optimal pour agencer les éléments html de la page générée, sous la forme d&amp;#039;un poster dont la taille est connue.&lt;br /&gt;
De plus, l&amp;#039;outil parle de nouveau de lui-même et m&amp;#039;évite de devoir faire moi-même de &amp;#039;réels choix&amp;#039; quand à la représentation de cette structure.&lt;br /&gt;
&lt;br /&gt;
==Thèmes CSS==&lt;br /&gt;
&lt;br /&gt;
On a donc des boites imbriqués les unes dans les autres visuellement, agencé sur la page par Flexbox, et représentant la structure dossier-fichiers de la clé usb.&lt;br /&gt;
Ces boites peuvent toujours prendre l&amp;#039;apparence qu&amp;#039;on souhaite en changeant le code CSS de notre page.&lt;br /&gt;
Pour forcer une cohérence de présentation et refléter au maximum la structure pré-existante on se limite à seulement deux classes CSS: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.folder{&lt;br /&gt;
  display: flex;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.file{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai ensuite décidé de créer plusieurs thèmes .CSS possibles pour ces deux classes, m&amp;#039;échappant de cette notion d&amp;#039;automatisme et devenant quelque chose de beaucoup plus sensible.Si le passage de l&amp;#039;arbre de dossier-fichier à une structure visuel bidimensionnel est direct, l&amp;#039;esthétique de cette structure est sujet à interprétation.&lt;br /&gt;
&lt;br /&gt;
Ces thèmes sont à l&amp;#039;image des thèmes custom/amateurs des vieux sites web: des couleurs vives, s&amp;#039;inspirant de choses connues ou de palette naturelle mais simplifiées, essayant de provoquer une forte impression graphique tout en étant minimal dans l&amp;#039;utilisation de procédés.&lt;br /&gt;
&lt;br /&gt;
Cela crée un jeu sur la façon dont on se représente nos données mentalement. &lt;br /&gt;
C&amp;#039;est à l&amp;#039;utilisateur_trice de la clé usb de choisir le thème parmis les possibilité pour l&amp;#039;impression de son poster final.&lt;br /&gt;
D&amp;#039;un côté la structure d&amp;#039;arborescence parle du comment l&amp;#039;utilisateur_trice agence ses données, s&amp;#039;organise et de son utilisation quotidienne de son objet clé usb.&lt;br /&gt;
De l&amp;#039;autre l’esthétique choisie se veut comme une pseudo-cosmogonie, un imaginaire, une astrologie, de comment cette utilisateur_trice se représente cette structure.&lt;br /&gt;
&lt;br /&gt;
Exemples de thèmes:&lt;br /&gt;
&lt;br /&gt;
BRICK&lt;br /&gt;
&lt;br /&gt;
[[Fichier: Maxmax_brick_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
WATER&lt;br /&gt;
&lt;br /&gt;
[[Fichier: Maxmax_water_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
ASTRO&lt;br /&gt;
&lt;br /&gt;
[[Fichier: desktop_astro_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Suite du projet==&lt;br /&gt;
&lt;br /&gt;
* Faire un total de 5,6 thèmes. Idées: forêt, papier, nuage, minimal ?&lt;br /&gt;
&lt;br /&gt;
* Difficulté: certain éléments (comme la typo: &amp;#039;pt&amp;#039; ou les éléments relatif à la typo: &amp;#039;em&amp;#039;) ne semble pas pouvoir être réduit en dessous d&amp;#039;une certaine taille... Comment s&amp;#039;assurer que le poster se met bien en page pour un A3? Peut-être utiliser du javascript qui re-scale l&amp;#039;entièreté du document?&lt;br /&gt;
&lt;br /&gt;
* Rajouter un système d&amp;#039;indexation et de signature du poster dans les marges: titre du projet, nom de l&amp;#039;utilisateur_trice, date ?&lt;br /&gt;
&lt;br /&gt;
* Faire l&amp;#039;installation/performance ou les gens vienne a une table avec leur clé usb et j&amp;#039;imprime le poster.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3255</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3255"/>
		<updated>2019-05-12T16:01:35Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Thèmes CSS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, et je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est donc optimal pour agencer les éléments html de la page générée, sous la forme d&amp;#039;un poster dont la taille est connue.&lt;br /&gt;
De plus, l&amp;#039;outil parle de nouveau de lui-même et m&amp;#039;évite de devoir faire moi-même de &amp;#039;réels choix&amp;#039; quand à la représentation de cette structure.&lt;br /&gt;
&lt;br /&gt;
==Thèmes CSS==&lt;br /&gt;
&lt;br /&gt;
On a donc des boites imbriqués les unes dans les autres visuellement, agencé sur la page par Flexbox, et représentant la structure dossier-fichiers de la clé usb.&lt;br /&gt;
Ces boites peuvent toujours prendre l&amp;#039;apparence qu&amp;#039;on souhaite en changeant le code CSS de notre page.&lt;br /&gt;
Pour forcer une cohérence de présentation et refléter au maximum la structure pré-existante on se limite à seulement deux classes CSS: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.folder{&lt;br /&gt;
  display: flex;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.file{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai ensuite décidé de créer plusieurs thèmes .CSS possibles pour ces deux classes, m&amp;#039;échappant de cette notion d&amp;#039;automatisme et devenant quelque chose de beaucoup plus sensible.Si le passage de l&amp;#039;arbre de dossier-fichier à une structure visuel bidimensionnel est direct, l&amp;#039;esthétique de cette structure est sujet à interprétation.&lt;br /&gt;
&lt;br /&gt;
Ces thèmes sont à l&amp;#039;image des thèmes custom/amateurs des vieux sites web: des couleurs vives, s&amp;#039;inspirant de choses connues ou de palette naturelle mais simplifiées, essayant de provoquer une forte impression graphique tout en étant minimal dans l&amp;#039;utilisation de procédés.&lt;br /&gt;
&lt;br /&gt;
Cela crée un jeu sur la façon dont on se représente nos données mentalement. &lt;br /&gt;
C&amp;#039;est à l&amp;#039;utilisateur_trice de la clé usb de choisir le thème parmis les possibilité pour l&amp;#039;impression de son poster final.&lt;br /&gt;
D&amp;#039;un côté la structure d&amp;#039;arborescence parle du comment l&amp;#039;utilisateur_trice agence ses données, s&amp;#039;organise et de son utilisation quotidienne de son objet clé usb.&lt;br /&gt;
De l&amp;#039;autre l’esthétique choisie se veut comme une pseudo-cosmogonie, un imaginaire, une astrologie, de comment cette utilisateur_trice se représente cette structure.&lt;br /&gt;
&lt;br /&gt;
Exemples de thèmes:&lt;br /&gt;
&lt;br /&gt;
BRICK&lt;br /&gt;
&lt;br /&gt;
[[Fichier: Maxmax_brick_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
WATER&lt;br /&gt;
&lt;br /&gt;
[[Fichier: Maxmax_water_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
ASTRO&lt;br /&gt;
&lt;br /&gt;
[[Fichier: desktop_astro_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Fichier:Desktop_astro_little.jpg&amp;diff=3254</id>
		<title>Fichier:Desktop astro little.jpg</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Fichier:Desktop_astro_little.jpg&amp;diff=3254"/>
		<updated>2019-05-12T16:01:27Z</updated>

		<summary type="html">&lt;p&gt;Dorian : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3253</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3253"/>
		<updated>2019-05-12T15:55:49Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flex Structure Print */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, et je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est donc optimal pour agencer les éléments html de la page générée, sous la forme d&amp;#039;un poster dont la taille est connue.&lt;br /&gt;
De plus, l&amp;#039;outil parle de nouveau de lui-même et m&amp;#039;évite de devoir faire moi-même de &amp;#039;réels choix&amp;#039; quand à la représentation de cette structure.&lt;br /&gt;
&lt;br /&gt;
==Thèmes CSS==&lt;br /&gt;
&lt;br /&gt;
On a donc des boites imbriqués les unes dans les autres visuellement, agencé sur la page par Flexbox, et représentant la structure dossier-fichiers de la clé usb.&lt;br /&gt;
Ces boites peuvent toujours prendre l&amp;#039;apparence qu&amp;#039;on souhaite en changeant le code CSS de notre page.&lt;br /&gt;
Pour forcer une cohérence de présentation et refléter au maximum la structure pré-existante on se limite à seulement deux classes CSS: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.folder{&lt;br /&gt;
  display: flex;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.file{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai ensuite décidé de créer plusieurs thèmes .CSS possibles pour ces deux classes, m&amp;#039;échappant de cette notion d&amp;#039;automatisme et devenant quelque chose de beaucoup plus sensible.Si le passage de l&amp;#039;arbre de dossier-fichier à une structure visuel bidimensionnel est direct, l&amp;#039;esthétique de cette structure est sujet à interprétation.&lt;br /&gt;
&lt;br /&gt;
Ces thèmes sont à l&amp;#039;image des thèmes custom/amateurs des vieux sites web: des couleurs vives, s&amp;#039;inspirant de choses connues ou de palette naturelle mais simplifiées, essayant de provoquer une forte impression graphique tout en étant minimal dans l&amp;#039;utilisation de procédés.&lt;br /&gt;
&lt;br /&gt;
Cela crée un jeu sur la façon dont on se représente nos données mentalement. &lt;br /&gt;
C&amp;#039;est à l&amp;#039;utilisateur_trice de la clé usb de choisir le thème parmis les possibilité pour l&amp;#039;impression de son poster final.&lt;br /&gt;
D&amp;#039;un côté la structure d&amp;#039;arborescence parle du comment l&amp;#039;utilisateur_trice agence ses données, s&amp;#039;organise et de son utilisation quotidienne de son objet clé usb.&lt;br /&gt;
De l&amp;#039;autre l’esthétique choisie se veut comme une pseudo-cosmogonie, un imaginaire, une astrologie, de comment cette utilisateur_trice se représente cette structure.&lt;br /&gt;
&lt;br /&gt;
Exemples de thèmes:&lt;br /&gt;
&lt;br /&gt;
[[Fichier: Maxmax_brick_little.jpg]]&lt;br /&gt;
[[Fichier: Maxmax_water_little.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Fichier:Maxmax_water_little.jpg&amp;diff=3252</id>
		<title>Fichier:Maxmax water little.jpg</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Fichier:Maxmax_water_little.jpg&amp;diff=3252"/>
		<updated>2019-05-12T15:55:44Z</updated>

		<summary type="html">&lt;p&gt;Dorian : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Fichier:Maxmax_brick_little.jpg&amp;diff=3251</id>
		<title>Fichier:Maxmax brick little.jpg</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Fichier:Maxmax_brick_little.jpg&amp;diff=3251"/>
		<updated>2019-05-12T15:53:54Z</updated>

		<summary type="html">&lt;p&gt;Dorian : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Fichier:Maxmax_brick.jpg&amp;diff=3249</id>
		<title>Fichier:Maxmax brick.jpg</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Fichier:Maxmax_brick.jpg&amp;diff=3249"/>
		<updated>2019-05-12T15:30:40Z</updated>

		<summary type="html">&lt;p&gt;Dorian : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3248</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3248"/>
		<updated>2019-05-12T15:29:03Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Design en CSS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, et je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est donc optimal pour agencer les éléments html de la page générée, sous la forme d&amp;#039;un poster dont la taille est connue.&lt;br /&gt;
De plus, l&amp;#039;outil parle de nouveau de lui-même et m&amp;#039;évite de devoir faire moi-même de &amp;#039;réels choix&amp;#039; quand à la représentation de cette structure.&lt;br /&gt;
&lt;br /&gt;
==Design en CSS==&lt;br /&gt;
&lt;br /&gt;
On a donc des boites imbriqués les unes dans les autres visuellement, agencé sur la page par Flexbox, et représentant la structure dossier-fichiers de la clé usb.&lt;br /&gt;
Ces boites peuvent toujours prendre l&amp;#039;apparence qu&amp;#039;on souhaite en changeant le code CSS de notre page.&lt;br /&gt;
Pour forcer une cohérence de présentation et refléter au maximum la structure pré-existante on se limite à seulement deux classes CSS: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.folder{&lt;br /&gt;
  display: flex;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.file{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai ensuite décidé de créer plusieurs thèmes .CSS possibles pour ces deux classes, m&amp;#039;échappant de cette notion d&amp;#039;automatisme et devenant quelque chose de beaucoup plus sensible.Si le passage de l&amp;#039;arbre de dossier-fichier à une structure visuel bidimensionnel est direct, l&amp;#039;esthétique de cette structure est sujet à interprétation.&lt;br /&gt;
&lt;br /&gt;
Ces thèmes sont à l&amp;#039;image des thèmes custom/amateurs des vieux sites web: des couleurs vives, s&amp;#039;inspirant de choses connues ou de palette naturelle mais simplifiées, essayant de provoquer une forte impression graphique tout en étant minimal dans l&amp;#039;utilisation de procédés.&lt;br /&gt;
&lt;br /&gt;
Cela crée un jeu sur la façon dont on se représente nos données mentalement. &lt;br /&gt;
C&amp;#039;est à l&amp;#039;utilisateur_trice de la clé usb de choisir le thème parmis les possibilité pour l&amp;#039;impression de son poster final.&lt;br /&gt;
D&amp;#039;un côté la structure d&amp;#039;arborescence parle du comment l&amp;#039;utilisateur_trice agence ses données, s&amp;#039;organise et de son utilisation quotidienne de son objet clé usb.&lt;br /&gt;
De l&amp;#039;autre l’esthétique choisie se veut comme une pseudo-cosmogonie, un imaginaire, une astrologie, de comment cette utilisateur_trice se représente cette structure.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3244</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3244"/>
		<updated>2019-05-12T15:10:07Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Design de l&amp;#039;impression */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, et je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est donc optimal pour agencer les éléments html de la page générée, sous la forme d&amp;#039;un poster dont la taille est connue.&lt;br /&gt;
De plus, l&amp;#039;outil parle de nouveau de lui-même et m&amp;#039;évite de devoir faire moi-même de &amp;#039;réels choix&amp;#039; quand à la représentation de cette structure.&lt;br /&gt;
&lt;br /&gt;
==Design en CSS==&lt;br /&gt;
&lt;br /&gt;
On a donc des boites imbriqués les unes dans les autres visuellement, représentant la structure dossier-fichiers de la clé usb.&lt;br /&gt;
Ces boites peuvent toujours prendre l&amp;#039;apparence qu&amp;#039;on souhaite en changeant le code CSS de notre page.&lt;br /&gt;
&lt;br /&gt;
Pour forcer une cohérence de présentation et refléter au maximum la structure pré-existante on se limite à seulement deux classes CSS: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3243</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3243"/>
		<updated>2019-05-12T15:06:48Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flexbox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, et je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est donc optimal pour agencer les éléments html de la page générée, sous la forme d&amp;#039;un poster dont la taille est connue.&lt;br /&gt;
De plus, l&amp;#039;outil parle de nouveau de lui-même et m&amp;#039;évite de devoir faire moi-même de &amp;#039;réels choix&amp;#039; quand à la représentation de cette structure.&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3242</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3242"/>
		<updated>2019-05-12T15:03:29Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flexbox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3241</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3241"/>
		<updated>2019-05-12T15:03:00Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flexbox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
Comme précisé sur ce [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ guide d&amp;#039;utilisation des flexbox]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3240</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3240"/>
		<updated>2019-05-12T15:01:10Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flexbox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
En html et css, il existe de nombreuse possibilités différentes pour agencer les éléments sur la page: en définissant des marges, en magnétisant des éléments ou non, en changeant leurs formes de displays, etc.&lt;br /&gt;
En continuant sur cette idée d&amp;#039;automatisme, je me suis intéressé au flexbox.&lt;br /&gt;
&lt;br /&gt;
Flexbox est une option de display pour un élément html, spécifiquement conçue pour un contenus dynamique, dont on ne connait pas forcément la taille, ou pour s&amp;#039;adapter à une taille limite particulière.&lt;br /&gt;
&lt;br /&gt;
{{Quote&lt;br /&gt;
|text= The Flexbox Layout module aims at providing a more efficient way to lay out, align and distribute space among items in a container, even when their size is unknown and/or dynamic (thus the word &amp;quot;flex&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The main idea behind the flex layout is to give the container the ability to alter its items&amp;#039; width/height (and order) to best fill the available space (mostly to accommodate to all kind of display devices and screen sizes). A flex container expands items to fill available free space, or shrinks them to prevent overflow.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3239</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3239"/>
		<updated>2019-05-12T14:54:22Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Arbre dossiers/fichiers en arbre HTML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A ce stade on a un système qui crée une page html ayant le même arbre de données que la structure de la clé usb en input.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3238</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3238"/>
		<updated>2019-05-12T14:52:45Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Arbre dossiers/fichiers en arbre HTML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3237</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3237"/>
		<updated>2019-05-12T14:52:14Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flex Structure Print */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    // on donne une dir en paramètre du dossier racine qu&amp;#039;on veut analyser&lt;br /&gt;
    function getDirContents($dir, &amp;amp;$results = array()){&lt;br /&gt;
&lt;br /&gt;
        // crée un tableau associatif (key -&amp;gt; value) avec les dossiers et fichiers de la dir actuelle&lt;br /&gt;
        $files = scandir($dir);&lt;br /&gt;
&lt;br /&gt;
        foreach($files as $key =&amp;gt; $value){&lt;br /&gt;
&lt;br /&gt;
            // on reconstrui le chemin total (dir + value)&lt;br /&gt;
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);&lt;br /&gt;
&lt;br /&gt;
            // si le chemin n&amp;#039;est pas un dossier&lt;br /&gt;
            if(!is_dir($path)) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;file&amp;#039;&amp;gt;&amp;lt;span&amp;gt;&amp;quot;.$value.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;   // on crée un div &amp;#039;file&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // si c&amp;#039;est un dossier&lt;br /&gt;
            // (Note: le &amp;#039;.&amp;#039; et &amp;#039;..&amp;#039; represente la dir courante et parente)&lt;br /&gt;
            else if($value != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $value != &amp;quot;..&amp;quot;) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039;&amp;gt;&amp;quot;;   // on ouvre un div dossier&lt;br /&gt;
                getDirContents($path, $foo, $results);  // on rappelle la fonction&lt;br /&gt;
                echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le div dossier&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;&amp;lt;div class=&amp;#039;folder&amp;#039; id=&amp;#039;root&amp;#039;&amp;gt;&amp;quot;;  // on crée le root usb folder&lt;br /&gt;
    getDirContents(&amp;#039;E:/&amp;#039;);  //on appelle la fonction sur le port usb&lt;br /&gt;
    echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;;   // on ferme le root usb folder&lt;br /&gt;
&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3236</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3236"/>
		<updated>2019-05-12T14:46:35Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flex Structure Print */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
Le but n&amp;#039;était pas de programmer un système complexe, mais de fonctionner de la manière la plus automatique, direct et instinctive, de façon à ce que le procédé parle de lui même au maximum.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme une arborescence, ou les éléments sont lié par des relations parents - enfants.&lt;br /&gt;
 &lt;br /&gt;
[[Fichier:Arborescence.jpg]]&lt;br /&gt;
&lt;br /&gt;
On retrouve la même structure d&amp;#039;arborescence dans l&amp;#039;agencement des éléments d&amp;#039;une page html.&lt;br /&gt;
En effet, quand on construit une page html, on imbrique des éléments entre eux, créant des relations parent-enfant à l&amp;#039;aide de balises textes. Le navigateur interprète ces balises comme des éléments graphiques bidimensionnels contenu les un dans les autre, reflétant directement l&amp;#039;arborescence de la page. C&amp;#039;est donc l&amp;#039;outil parfait pour représenter ce type de structure visuellement, car c&amp;#039;est sur ce même principe qu&amp;#039;il fonctionne...&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai donc utilisé un script .php, qui parcours l&amp;#039;entièreté de la clé usb en input et ré-écris sa structure sous forme de balises à l&amp;#039;intérieur d&amp;#039;une page html.&lt;br /&gt;
&lt;br /&gt;
mettre le code&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Fichier:Arborescence.jpg&amp;diff=3235</id>
		<title>Fichier:Arborescence.jpg</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Fichier:Arborescence.jpg&amp;diff=3235"/>
		<updated>2019-05-12T14:35:33Z</updated>

		<summary type="html">&lt;p&gt;Dorian : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3234</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3234"/>
		<updated>2019-05-12T14:33:41Z</updated>

		<summary type="html">&lt;p&gt;Dorian : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
(Projet de Dorian Timmermans)&lt;br /&gt;
&lt;br /&gt;
==Idée de départ==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;idée de base est de créer un système qui permet l&amp;#039;impression sous la forme d&amp;#039;un poster de la structure de données d&amp;#039;une clé usb.&lt;br /&gt;
Plutôt que d&amp;#039;imprimer sur papier un contenu choisi de la clé usb, comme on ferait chez l&amp;#039;imprimeur, le système utilise tout ce qui n&amp;#039;est pas le contenu lui-même, c&amp;#039;est-à-dire la structure entre les dossiers et fichiers, et imprime cela.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
La structure de dossiers-fichiers en informatique forme ce qu&amp;#039;on appelle un arbre.&lt;br /&gt;
&lt;br /&gt;
php. recursion&lt;br /&gt;
&lt;br /&gt;
mettre le code&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3233</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3233"/>
		<updated>2019-05-12T13:08:39Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flex Structure Print */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
projet de Dorian Timmermans&lt;br /&gt;
idée: lien entre dossier-fichier clé usb et html structure.&lt;br /&gt;
Du coup permettre l&amp;#039;impression, non pas de contenu sur la clé usb, mais de tout ce qui n&amp;#039;est pas du contenu: la structure elle-même.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
php. recursion&lt;br /&gt;
&lt;br /&gt;
mettre le code&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3232</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3232"/>
		<updated>2019-05-12T13:07:56Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Flex Structure Print */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
idée: lien entre dossier-fichier clé usb et html structure.&lt;br /&gt;
Du coup permettre l&amp;#039;impression, non pas de contenu sur la clé usb, mais de tout ce qui n&amp;#039;est pas du contenu: la structure elle-même.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
php. recursion&lt;br /&gt;
&lt;br /&gt;
mettre le code&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
&lt;br /&gt;
comment les agencers dans l&amp;#039;espace d&amp;#039;une page html ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3231</id>
		<title>ERG::flexstructureprint</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::flexstructureprint&amp;diff=3231"/>
		<updated>2019-05-12T13:06:33Z</updated>

		<summary type="html">&lt;p&gt;Dorian : Page créée avec « =Flex Structure Print=  idée: lien entre dossier-fichier clé usb et html structure. Du coup permettre l&amp;#039;impression, non pas de contenu sur la clé usb, mais de tout ce q... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Flex Structure Print=&lt;br /&gt;
&lt;br /&gt;
idée: lien entre dossier-fichier clé usb et html structure.&lt;br /&gt;
Du coup permettre l&amp;#039;impression, non pas de contenu sur la clé usb, mais de tout ce qui n&amp;#039;est pas du contenu: la structure elle-même.&lt;br /&gt;
&lt;br /&gt;
==Arbre dossiers/fichiers en arbre HTML==&lt;br /&gt;
&lt;br /&gt;
php. recursion&lt;br /&gt;
&lt;br /&gt;
mettre le code&lt;br /&gt;
&lt;br /&gt;
==Design de l&amp;#039;impression==&lt;br /&gt;
&lt;br /&gt;
l&amp;#039;apparence de cette page hmtl peut changer via le css&lt;br /&gt;
pour forcer une cohérence de présentation et refleter au maximum la structure pré-existante on se limite a deux classes css: .folder et .files.&lt;br /&gt;
&lt;br /&gt;
Le nom des fichier est utiliser&lt;br /&gt;
&lt;br /&gt;
différent thèmes sont construit (fichier css différents) afin de jouer sur la façon dont on se représente nos données.&lt;br /&gt;
Entre la cosmogonie et les thèmes kitsch des vieux sites web&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
être a une table, la personne donne sa clé et on rend l&amp;#039;impression.&lt;br /&gt;
Difficulté: forcé le css a imprimer le contenu en 1 seule page&lt;br /&gt;
difficultées technique: ...&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::Code-2018-1&amp;diff=3230</id>
		<title>ERG::Code-2018-1</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::Code-2018-1&amp;diff=3230"/>
		<updated>2019-05-12T13:00:11Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Groupes de travail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Ce cours est destiné aux étudiants de BAC2.&lt;br /&gt;
&lt;br /&gt;
==Groupes de travail==&lt;br /&gt;
* [[ERG::datagrab | Data grab]]: récupérer des données sur Internet&lt;br /&gt;
* [[ERG::layouttools | Layout tools]]: outils de mise en page&lt;br /&gt;
* [[ERG::livecoding | Live coding]]&lt;br /&gt;
* [[ERG::interactivenarration | Narration interactive]]&lt;br /&gt;
* [[ERG::physicalcomputing | Physical computing]]&lt;br /&gt;
* [[ERG::phpbrussels | PHP.Brussels]]&lt;br /&gt;
* [[ERG::flexstructureprint | Flex Structure Print]]&lt;br /&gt;
&lt;br /&gt;
==Séances==&lt;br /&gt;
* 24/09/2018: intro langages + constitution des groupes de travail&lt;br /&gt;
* 01/10/2018: intro langages&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
html&lt;br /&gt;
css&lt;br /&gt;
javascript&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
java&lt;br /&gt;
-&amp;gt; machine virtuelle&lt;br /&gt;
python&lt;br /&gt;
c&lt;br /&gt;
c++&lt;br /&gt;
ruby &lt;br /&gt;
c#&lt;br /&gt;
cobalt&lt;br /&gt;
assembleur&lt;br /&gt;
scala&lt;br /&gt;
php&lt;br /&gt;
asp&lt;br /&gt;
&lt;br /&gt;
react.js&lt;br /&gt;
processing&lt;br /&gt;
&lt;br /&gt;
WEB&lt;br /&gt;
html&lt;br /&gt;
css&lt;br /&gt;
javascript&lt;br /&gt;
java&lt;br /&gt;
python&lt;br /&gt;
ruby&lt;br /&gt;
php&lt;br /&gt;
asp&lt;br /&gt;
&lt;br /&gt;
APPLICATION&lt;br /&gt;
java&lt;br /&gt;
python&lt;br /&gt;
c&lt;br /&gt;
c++&lt;br /&gt;
c#&lt;br /&gt;
cobalt&lt;br /&gt;
assembleur&lt;br /&gt;
scala&lt;br /&gt;
&lt;br /&gt;
LIBRAIRIES&lt;br /&gt;
react.js -&amp;gt; librairie javascript&lt;br /&gt;
processing -&amp;gt; librairie java&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
PROGRAMMATION WEB CÔTÉ CLIENT&lt;br /&gt;
html&lt;br /&gt;
css&lt;br /&gt;
javascript&lt;br /&gt;
&lt;br /&gt;
PROGRAMMATION WEB CÔTÉ SERVEUR&lt;br /&gt;
javascript -&amp;gt; avec node.js -&amp;gt; installer nodejs&lt;br /&gt;
php -&amp;gt; apache, php&lt;br /&gt;
python -&amp;gt; python&lt;br /&gt;
ruby -&amp;gt; apache?&lt;br /&gt;
asp -&amp;gt; apache&lt;br /&gt;
&lt;br /&gt;
TYPES DE BASE DE DONNÉES&lt;br /&gt;
mysql -&amp;gt; sql&lt;br /&gt;
mongodb&lt;br /&gt;
mariadb -&amp;gt; sql&lt;br /&gt;
sqlite -&amp;gt; sql&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
BINAIRE&lt;br /&gt;
&lt;br /&gt;
0 =    0&lt;br /&gt;
1 =    1&lt;br /&gt;
2 =   10&lt;br /&gt;
3 =   11&lt;br /&gt;
4 =  100&lt;br /&gt;
5 =  101&lt;br /&gt;
6 =  110&lt;br /&gt;
7 =  111&lt;br /&gt;
8 = 1000&lt;br /&gt;
&lt;br /&gt;
32 16 8 4 2 1&lt;br /&gt;
 1  0 0 0 0 0&lt;br /&gt;
&lt;br /&gt;
1 chiffre binaire = bit&lt;br /&gt;
8 chiffres binaires = byte = un octet&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
ASSEMBLEUR&lt;br /&gt;
utilisé pour les drivers&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
C, ou le C++&lt;br /&gt;
langage de haut niveau&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
javascript -&amp;gt; interprété par le navigateur &lt;br /&gt;
le navigateur -&amp;gt; codé en c, c++&lt;br /&gt;
&lt;br /&gt;
-----------------------------&lt;br /&gt;
&lt;br /&gt;
CLASSIFICATION SYNTAXE&lt;br /&gt;
&lt;br /&gt;
html, xml = description, langage de balises&lt;br /&gt;
&amp;lt;boite&amp;gt;&lt;br /&gt;
	&amp;lt;chocolat&amp;gt;&amp;lt;/chocolat&amp;gt;&lt;br /&gt;
&amp;lt;/boite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
javascript = langage de script, algorithmique&lt;br /&gt;
		orienté objet = on définit des objets qu&amp;#039;on utilise après&lt;br /&gt;
		non typé&lt;br /&gt;
&lt;br /&gt;
C++ = du C orienté objet, typé&lt;br /&gt;
JAVA = orienté objet, typé&lt;br /&gt;
PHP = orienté objet (ou pas), non typé&lt;br /&gt;
PYTHON = orienté objet (ou pas), non typé&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=3143</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=3143"/>
		<updated>2019-02-04T10:59:09Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Configuration Apache (04-03-19) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;br /&gt;
&lt;br /&gt;
voici un exemple de bout de phrase généré en mélangeant les pages des écoles d&amp;#039;art en belgique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
L’école est importante avec une vingtaine de nationale supérieure des arts décoratifs par l&amp;#039;architecture de l&amp;#039;institutions se développement d&amp;#039;un orchestre composé de professeur et l’étudiant-es ont aussi l’occasion de se confronter à d’autres pratiques.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Organisé en vastes plateaux superposés, il abrite plusieurs orientations ou lors de l’usage de différentes sensibilités artistiques: Plusieurs associations contribuent à son dynamisme et à son rayonnement similaire, notamment des vernissages et des expositions à la suite des collaborations entre étudiants est compris entre 10 et 15 par classe.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un autre essaies avec les pages wikipédia Superman, Pluie et Champignon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Le plomb protègent contenir des quantité d&amp;#039;ions ou de composés aromatique et crypté, mais également dit par litre d&amp;#039;eau annuel, de vastes « rideaux de pluie créent des nuages chauds et secs mais aussi son lot de nouvelle série censée raconter des aventure Comics.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration Apache (04-03-19)===&lt;br /&gt;
&lt;br /&gt;
* Lancer Wamp64.&lt;br /&gt;
* Dans le fichier httpd.conf (configuration d&amp;#039;Apache), commenter la ligne Scriptalias (elle force à regarder dans le dossier cgi-bin dans l&amp;#039;instal dir de Wamp64 et empêche donc de faire fonctionner le script dans un dossier custom).&lt;br /&gt;
* Créer un sous-dossier &amp;#039;cgi-bin&amp;#039; dans le dossier du projet dans lequel on va mettre le script python.&lt;br /&gt;
* Créer un virtual host sur Apache qui pointe vers ce dossier du projet.&lt;br /&gt;
* Note: toujours redémarrer les services Wamp64 après modification des virtual host ou de la configuration.&lt;br /&gt;
* Au début du script python préciser en première ligne l&amp;#039;endroit ou se trouve python: &amp;quot;#!C:/Python27/python.exe&amp;quot;&lt;br /&gt;
* A ce stade-ci si on ouvre l&amp;#039;adresse du script python dans le navigateur, il affiche juste le code source, pour dire au browser de l&amp;#039;exécuter on doit éditer le dossier de configuration de virtual host: httpd-vhost.conf. On rajoute une deuxième directory qui pointe vers le cgi-bin du projet avec des nouvelles options qui précise d’exécuter les fichier .py à l’intérieur quand on les ouvres dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory  &amp;quot;d:/erg/projets/wiki/cgi-bin/&amp;quot;&amp;gt;&lt;br /&gt;
   Addhandler cgi-script .cgi .py&lt;br /&gt;
   Options +Indexes +FollowSymLinks +ExecCGI&lt;br /&gt;
   AllowOverride All&lt;br /&gt;
   Order allow,deny&lt;br /&gt;
   Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le script python ne peut pas faire passer de variable vu que c&amp;#039;est un langage différent, il va donc print quelque chose tout en précisant la syntaxe de ce print. On peut renvoyer de l&amp;#039;html ou du json ou du texte brut par exemple. Pour tester juste mettre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
   print &amp;quot;Content-type: text\n&amp;quot;&lt;br /&gt;
   print &amp;quot;Coucou&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Maintenant on doit ecrire une requête http AJAX dans le javascript https://blog.garstasio.com/you-dont-need-jquery/ajax/&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=3141</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=3141"/>
		<updated>2019-02-04T10:54:47Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Data grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;br /&gt;
&lt;br /&gt;
voici un exemple de bout de phrase généré en mélangeant les pages des écoles d&amp;#039;art en belgique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
L’école est importante avec une vingtaine de nationale supérieure des arts décoratifs par l&amp;#039;architecture de l&amp;#039;institutions se développement d&amp;#039;un orchestre composé de professeur et l’étudiant-es ont aussi l’occasion de se confronter à d’autres pratiques.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Organisé en vastes plateaux superposés, il abrite plusieurs orientations ou lors de l’usage de différentes sensibilités artistiques: Plusieurs associations contribuent à son dynamisme et à son rayonnement similaire, notamment des vernissages et des expositions à la suite des collaborations entre étudiants est compris entre 10 et 15 par classe.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un autre essaies avec les pages wikipédia Superman, Pluie et Champignon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Le plomb protègent contenir des quantité d&amp;#039;ions ou de composés aromatique et crypté, mais également dit par litre d&amp;#039;eau annuel, de vastes « rideaux de pluie créent des nuages chauds et secs mais aussi son lot de nouvelle série censée raconter des aventure Comics.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration Apache (04-03-19)===&lt;br /&gt;
&lt;br /&gt;
* Lancer Wamp64.&lt;br /&gt;
* Dans le fichier httpd.conf (configuration d&amp;#039;Apache), commenter la ligne Scriptalias (elle force à regarder dans le dossier cgi-bin dans l&amp;#039;instal dir de Wamp64 et empêche donc de faire fonctionner le script dans un dossier custom).&lt;br /&gt;
* Créer un sous-dossier &amp;#039;cgi-bin&amp;#039; dans le dossier du projet dans lequel on va mettre le script python.&lt;br /&gt;
* Créer un virtual host sur Apache qui pointe vers ce dossier du projet.&lt;br /&gt;
* Note: toujours redémarrer les services Wamp64 après modification des virtual host ou de la configuration.&lt;br /&gt;
* Au début du script python préciser en première ligne l&amp;#039;endroit ou se trouve python: &amp;quot;#!C:/Python27/python.exe&amp;quot;&lt;br /&gt;
* A ce stade-ci si on ouvre l&amp;#039;adresse du script python dans le navigateur, il affiche juste le code source, pour dire au browser de l&amp;#039;exécuter on doit éditer le dossier de configuration de virtual host: httpd-vhost.conf. On rajoute une deuxième directory qui pointe vers le cgi-bin du projet avec des nouvelles options qui précise d’exécuter les fichier .py à l’intérieur quand on les ouvres dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory  &amp;quot;d:/erg/projets/wiki/cgi-bin/&amp;quot;&amp;gt;&lt;br /&gt;
   Addhandler cgi-script .cgi .py&lt;br /&gt;
   Options +Indexes +FollowSymLinks +ExecCGI&lt;br /&gt;
   AllowOverride All&lt;br /&gt;
   Order allow,deny&lt;br /&gt;
   Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2907</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2907"/>
		<updated>2018-12-16T17:17:55Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Note finale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;br /&gt;
&lt;br /&gt;
voici un exemple de bout de phrase généré en mélangeant les pages des écoles d&amp;#039;art en belgique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
L’école est importante avec une vingtaine de nationale supérieure des arts décoratifs par l&amp;#039;architecture de l&amp;#039;institutions se développement d&amp;#039;un orchestre composé de professeur et l’étudiant-es ont aussi l’occasion de se confronter à d’autres pratiques.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Organisé en vastes plateaux superposés, il abrite plusieurs orientations ou lors de l’usage de différentes sensibilités artistiques: Plusieurs associations contribuent à son dynamisme et à son rayonnement similaire, notamment des vernissages et des expositions à la suite des collaborations entre étudiants est compris entre 10 et 15 par classe.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un autre essaies avec les pages wikipédia Superman, Pluie et Champignon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Le plomb protègent contenir des quantité d&amp;#039;ions ou de composés aromatique et crypté, mais également dit par litre d&amp;#039;eau annuel, de vastes « rideaux de pluie créent des nuages chauds et secs mais aussi son lot de nouvelle série censée raconter des aventure Comics.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2906</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2906"/>
		<updated>2018-12-16T17:11:23Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Data grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;br /&gt;
&lt;br /&gt;
voici un exemple de bout de phrase généré en mélangeant les pages wikipédia Superman, Pluie et Champignon.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
Le plomb protègent contenir des quantité d&amp;#039;ions ou de composés aromatique et crypté, mais également dit par litre d&amp;#039;eau annuel, de vastes « rideaux de pluie créent des nuages chauds et secs mais aussi son lot de nouvelle série censée raconter des aventure Comics.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2905</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2905"/>
		<updated>2018-12-16T17:09:49Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Note finale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;br /&gt;
&lt;br /&gt;
voici un exemple de bout de phrase généré en mélangeant les pages wikipédia Superman, Pluie et Champignon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
Le plomb protègent contenir des quantité d&amp;#039;ions ou de composés aromatique et crypté, mais également dit par litre d&amp;#039;eau annuel, de vastes « rideaux de pluie créent des nuages chauds et secs mais aussi son lot de nouvelle série censée raconter des aventure Comics.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2904</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2904"/>
		<updated>2018-12-16T17:08:41Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Data grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;br /&gt;
&lt;br /&gt;
voici un exemple de bout de phrase généré en mélangeant les pages wikipédia Superman, Pluie et Champignon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Le plomb protègent contenir des quantité d&amp;#039;ions ou de composés aromatique et crypté, mais également dit par litre d&amp;#039;eau annuel, de vastes « rideaux de pluie créent des nuages chauds et secs mais aussi son lot de nouvelle série censée raconter des aventure Comics.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2903</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2903"/>
		<updated>2018-12-16T17:00:34Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Note finale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut: le contenu entre balises paragraphes.&lt;br /&gt;
* le script javascript qui recrée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE -&amp;gt; lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2902</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2902"/>
		<updated>2018-12-16T16:59:12Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Note finale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
* le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
* le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
* la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
* la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
* on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2901</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2901"/>
		<updated>2018-12-16T16:58:37Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Communication entre l&amp;#039;algorithme de génération et la partie Grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
* le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
* le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2900</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2900"/>
		<updated>2018-12-16T16:58:14Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Communication entre l&amp;#039;algorithme de génération et la partie Grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon [http://httpd.apache.org/docs/current/howto/cgi.html tutoriel] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2899</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2899"/>
		<updated>2018-12-16T16:57:51Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Communication entre l&amp;#039;algorithme de génération et la partie Grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2898</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2898"/>
		<updated>2018-12-16T16:57:32Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Sessions suivantes confondues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Communication entre l&amp;#039;algorithme de génération et la partie Grab ===&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer [http://www.wampserver.com/en/ WAMP] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2897</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2897"/>
		<updated>2018-12-16T16:55:46Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Partie Grab / Côté client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise [https://docs.python.org/2/library/urllib.html urllib] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
==== Communication entre l&amp;#039;algorithme et la partie Grab ====&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer WAMP [http://www.wampserver.com/en/] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
==== Fonctionnement de l&amp;#039;algorithme ====&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2896</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2896"/>
		<updated>2018-12-16T16:55:20Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Session du 24/09/2018 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; [https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup]. Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib [https://docs.python.org/2/library/urllib.html] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
==== Communication entre l&amp;#039;algorithme et la partie Grab ====&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer WAMP [http://www.wampserver.com/en/] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
==== Fonctionnement de l&amp;#039;algorithme ====&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2895</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2895"/>
		<updated>2018-12-16T16:54:39Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Étapes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; Beautiful Soup[https://www.crummy.com/software/BeautifulSoup/bs4/doc/]. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia... En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib [https://docs.python.org/2/library/urllib.html] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
==== Communication entre l&amp;#039;algorithme et la partie Grab ====&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer WAMP [http://www.wampserver.com/en/] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
==== Fonctionnement de l&amp;#039;algorithme ====&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2894</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2894"/>
		<updated>2018-12-16T16:53:24Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Étapes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source. &amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; Beautiful Soup [https://www.crummy.com/software/BeautifulSoup/bs4/doc/]. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia...&lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib [https://docs.python.org/2/library/urllib.html] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
==== Communication entre l&amp;#039;algorithme et la partie Grab ====&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer WAMP [http://www.wampserver.com/en/] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
==== Fonctionnement de l&amp;#039;algorithme ====&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2893</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2893"/>
		<updated>2018-12-16T16:52:57Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Data grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises de paragraphes.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; Beautiful Soup [https://www.crummy.com/software/BeautifulSoup/bs4/doc/]. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia...&lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib [https://docs.python.org/2/library/urllib.html] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Sessions suivantes confondues ==&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
==== Communication entre l&amp;#039;algorithme et la partie Grab ====&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer WAMP [http://www.wampserver.com/en/] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
==== Fonctionnement de l&amp;#039;algorithme ====&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
== Note finale ==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2892</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2892"/>
		<updated>2018-12-16T16:50:37Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Data grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Pré-télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles que l&amp;#039;on veut utiliser comme matériel source&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui sur base des pages des écoles d&amp;#039;arts wikipédia fait une sorte de description aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise. Le résultat finale serait sous la forme d&amp;#039;une page HTML, à chaque fois qu&amp;#039;on l&amp;#039;ouvre on a un faux wiki généré procéduralement. Pour ça on a besoin d&amp;#039;un script javascript dans la page HTML. Javascript permet de faire une requête Ajax pour utiliser un programme en Python, côté client. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple) -&amp;gt; ce qui est entre les balises &amp;lt;p&amp;gt; et &amp;lt;/p&amp;gt;.&lt;br /&gt;
Ensuite le script java renvoie le résultat dans une page HTML avec une mise en page rapide.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
*Sélectionner les blocs de textes de description qu&amp;#039;on veut utilser dans les pages HTML.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML -&amp;gt; Beautiful Soup [https://www.crummy.com/software/BeautifulSoup/bs4/doc/]. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia...&lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib [https://docs.python.org/2/library/urllib.html] : une librairie python qui permet de faire des requêtes http. Cela permet que l&amp;#039;input soit juste une suite d&amp;#039;adresses URL de pages wikipédia. Le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
== Communication entre l&amp;#039;algorithme et la partie Grab ==&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte récuperé en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
* Installer WAMP [http://www.wampserver.com/en/] qui permet d&amp;#039;avoir entre autre APACHE pour windows. Ce que fait APACHE c&amp;#039;est de créer un serveur en pointant une certaine direction de dossiers. Ensuite on peut mettre le script python sur ce serveur (donc dans le dossier spécifié). &lt;br /&gt;
Le protocole de communication fonctionne comme cela: &lt;br /&gt;
- le script javascript envoie une requête http à l&amp;#039;adresse du serveur créé via apache APACHE&lt;br /&gt;
- le script python est exécuter sur le serveur APACHE (rappel: un script python ne peut pas s’exécuter dans le navigateur) et peut renvoyer l&amp;#039;information dont on a besoin.&lt;br /&gt;
En fait cela fonctionne comme une requête http à une API, qui exécute tout les programmes qu&amp;#039;elle veut sur un serveur et les renvoi à l&amp;#039;application.&lt;br /&gt;
Voici un bon tutoriel [http://httpd.apache.org/docs/current/howto/cgi.html] la-dessus.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l&amp;#039;algorithme ==&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;br /&gt;
&lt;br /&gt;
==Note finale==&lt;br /&gt;
&lt;br /&gt;
Ce qui à été fait:&lt;br /&gt;
- le script python qui récupère et parse les pages html pour fournir un long texte brut.&lt;br /&gt;
- le script javascript qui re-crée aléatoirement et procéduralement un texte sur base d&amp;#039;un autre texte source.&lt;br /&gt;
Ce qu&amp;#039;il reste à faire:&lt;br /&gt;
- la communication entre les deux script via le serveur APACHE - lire tutoriel&lt;br /&gt;
- la mise en page du résultat dans un page html avec une &amp;quot;esthétique wiki&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
- le programme finale pourrait être mis sur le web et serveur comme outil pour faire des mashup de page wikipédia.&lt;br /&gt;
- on pourrait aller plus loin et imaginer un système qui ne récupère pas que le texte brut / descriptif des pages html sources mais aussi leur contenu graphique (mise ne page, images, etc) et faire des mashup plus globale de page html.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2564</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2564"/>
		<updated>2018-10-08T09:33:44Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Fonctionnement de l&amp;#039;algorithme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
== Communication entre l&amp;#039;algorithme et la partie Grab ==&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte grabber en python à une variable du script javascript grâce à Ajax. Notons que le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l&amp;#039;algorithme ==&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ensuite, afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database quels sont les possibilitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la database du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2563</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2563"/>
		<updated>2018-10-08T09:32:19Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Fonctionnement de l&amp;#039;algorithme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
== Communication entre l&amp;#039;algorithme et la partie Grab ==&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte grabber en python à une variable du script javascript grâce à Ajax. Notons que le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l&amp;#039;algorithme ==&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ensuite, afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes au hasard. On va ensuite regarder dans la database créée à l&amp;#039;étape précédente quels sont les possiblitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la base de donnée générée sur base du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2560</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2560"/>
		<updated>2018-10-08T09:23:14Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Fonctionnement de l&amp;#039;algorithme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
== Communication entre l&amp;#039;algorithme et la partie Grab ==&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte grabber en python à une variable du script javascript grâce à Ajax. Notons que le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l&amp;#039;algorithme ==&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ensuite, afin de générer un texte nouveau, l&amp;#039;algorithme commence par prendre un de ces n-grammes. On va regarder dans la database créée à l&amp;#039;étape précédente quels sont les possiblitées de lettre qui peuvent suivre ce n-gramme. On en choisis une aléatoirement et on la rajoute derrière le n-gramme choisis. On a alors une nouvelle suite de n caractères qui finisse notre texte et on répète l&amp;#039;opération sur ce nouveau n-gramme. En répétant ce processus probabiliste, on écris lettre par lettre un nouveau texte grâce à la base de donnée générée sur base du texte source. Les phrases seront semblable à celle qu&amp;#039;on trouve dans le texte source mais l&amp;#039;aspect probabiliste permet de générer des nouvelles suites de mots et donc de mélanger et restructurer ce texte.&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2559</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2559"/>
		<updated>2018-10-08T09:18:30Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Communication entre l&amp;#039;algorithme et la partie Grab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
== Communication entre l&amp;#039;algorithme et la partie Grab ==&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte grabber en python à une variable du script javascript grâce à Ajax. Notons que le script python n&amp;#039;aurait pas pu être incorporer dans la partie javascript parce que javascript est côté serveur et ne permet donc pas de faire des requêtes pour récupérer les données de pages html sur le net, cette action est obligé de se trouver dans un script côté client.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l&amp;#039;algorithme ==&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2550</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2550"/>
		<updated>2018-10-08T08:24:43Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Algorythme de génération de texte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
== Communication entre l&amp;#039;algorithme et la partie Grab ==&lt;br /&gt;
&lt;br /&gt;
Pour que l&amp;#039;algorithme de génération de texte en javascript puisse fonctionner, on doit passer le texte grabber en python à une variable du script javascript grâce à Ajax.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l&amp;#039;algorithme ==&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2549</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2549"/>
		<updated>2018-10-08T08:18:11Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Partie &amp;quot;Grab&amp;quot; / &amp;quot;Côté client&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie Grab / Côté client ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2548</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2548"/>
		<updated>2018-10-08T08:17:30Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Algorythme de génération de texte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie &amp;quot;Grab&amp;quot; / &amp;quot;Côté client&amp;quot; ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui peuvent le suivre. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2547</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2547"/>
		<updated>2018-10-08T08:16:51Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Algorythme de génération de texte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie &amp;quot;Grab&amp;quot; / &amp;quot;Côté client&amp;quot; ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui le suivent. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2546</id>
		<title>ERG::datagrab</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::datagrab&amp;diff=2546"/>
		<updated>2018-10-08T08:15:13Z</updated>

		<summary type="html">&lt;p&gt;Dorian : /* Partie &amp;quot;Grab&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Data grab=&lt;br /&gt;
&lt;br /&gt;
==Session du 24/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Objectif===&lt;br /&gt;
À partir de la page wikipédia [https://fr.wikipedia.org/wiki/Liste_des_%C3%A9coles_d%27art_en_Belgique Liste de écoles d&amp;#039;art en Belgique]. &lt;br /&gt;
Sur base des écoles d&amp;#039;art à Bruxelles construire un générateur de page wiki d&amp;#039;école d&amp;#039;art.&lt;br /&gt;
&lt;br /&gt;
===Étapes===&lt;br /&gt;
*Télécharger les pages Wikipédia des écoles d&amp;#039;arts de Bruxelles&lt;br /&gt;
&amp;quot;Enregistrer sous&amp;quot;, &amp;quot;Page web, complète&amp;quot; en HTML&lt;br /&gt;
&lt;br /&gt;
*Faire un programme qui va chercher les descriptions des pages des écoles d&amp;#039;arts pour mélanger ces textes et faire une sorte de description &amp;quot;moyenne&amp;quot; aléatoire d&amp;#039;une école d&amp;#039;art bruxelloise.&lt;br /&gt;
&lt;br /&gt;
Pour ça on a besoin de javascript dans la page HTML que l&amp;#039;on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C&amp;#039;est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l&amp;#039;on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple).&lt;br /&gt;
Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML.&lt;br /&gt;
À chaque fois que l&amp;#039;on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l&amp;#039;on a fourni au départ.&lt;br /&gt;
[[Fichier:1datagrab 24 09 18.png]]&lt;br /&gt;
&lt;br /&gt;
Sélectionner les blocs de textes de description.&lt;br /&gt;
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML.&lt;br /&gt;
On télécharge et on installe Beautiful Soup.&lt;br /&gt;
Dans un éditeur de texte (comme Notepad++) on essaye d&amp;#039;ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. &lt;br /&gt;
Problème d&amp;#039;encodage des caractères : le script Beautiful Soup n&amp;#039;arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. &lt;br /&gt;
En fait le problème venait du terminal qui n&amp;#039;arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.&lt;br /&gt;
&lt;br /&gt;
==Session du 08/09/2018==&lt;br /&gt;
&lt;br /&gt;
===Partie &amp;quot;Grab&amp;quot; / &amp;quot;Côté client&amp;quot; ===&lt;br /&gt;
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d&amp;#039;input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d&amp;#039;encoder une suite d&amp;#039;adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui &amp;quot;grab&amp;quot; (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
#list of urls we use as source material&lt;br /&gt;
&lt;br /&gt;
urls=[&amp;#039;https://en.wikipedia.org/wiki/Soup&amp;#039;,&lt;br /&gt;
	  &amp;#039;https://en.wikipedia.org/wiki/Rain&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
#we request each of those url in a &amp;#039;htmls&amp;#039; list&lt;br /&gt;
htmls=[]&lt;br /&gt;
for url in urls:&lt;br /&gt;
	html = urllib.urlopen(url)&lt;br /&gt;
	htmls.append(html.read())&lt;br /&gt;
&lt;br /&gt;
#we create a &amp;#039;soup&amp;#039; html parser objet for every html page requested&lt;br /&gt;
soup=[]&lt;br /&gt;
for html in htmls: &lt;br /&gt;
	soup.append(BeautifulSoup(html, &amp;#039;html.parser&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
#we put all the text between the &amp;lt;p&amp;gt; markups of those html in a .txt file&lt;br /&gt;
text = []&lt;br /&gt;
with open(&amp;#039;text.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
	for sp in soup:&lt;br /&gt;
		for tag in sp.find_all(&amp;#039;p&amp;#039;):&lt;br /&gt;
			text.append(tag.get_text())&lt;br /&gt;
			f.write(tag.get_text().encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorythme de génération de texte ===&lt;br /&gt;
&lt;br /&gt;
Pour faire un mashup des différents textes extirpés des pages html, on va utiliser un algorithme typique de NLP (Natural Language Processing - le domaine de l&amp;#039;informatique qui s’intéresse à l&amp;#039;analyse et à la synthèse de texte). L&amp;#039;algorithme fonctionne comme ceci:&lt;br /&gt;
&lt;br /&gt;
* Pour chaque groupe de n caractères qui se suivent (n-grammes) dans le texte source, associer le caractère qui suit. On a donc une database en 2 colonnes, avec à chaque fois d&amp;#039;un côté un n-grammes du texte source et de l&amp;#039;autre l&amp;#039;ensemble des caractères qui le suivent. Par exemple pour la phrase &amp;quot;Coucou c&amp;#039;est nous&amp;quot; et pour n=2, on a:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
co -&amp;gt; {&amp;#039;u&amp;#039;}&lt;br /&gt;
ou -&amp;gt; {&amp;#039;c&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;s&amp;#039;}&lt;br /&gt;
uc -&amp;gt; {&amp;#039;o&amp;#039;}&lt;br /&gt;
u_ -&amp;gt; {&amp;#039;c&amp;#039;}&lt;br /&gt;
c&amp;#039; -&amp;gt; {&amp;#039;e&amp;#039;}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dorian</name></author>
	</entry>
</feed>