Notes de résidence Olivier Heinry & An Mertens
Variable 21-7-13 au 27-7-13
*Samedi 27
Recherches sur la détection du langage naturel d'un texte (limité aux langues européennes et à l'alphabet latin)
Hypothèse personnelle valable pour de longs textes littéraires:
il s'agit d'établir des scores en croisant la recherche sur plusieurs paramètres:
-faire une recherche sur le caractères et les signes de ponctuation propres à cette langue (marche bien pour le français, l'allemand, l'espagnol, plus difficile pour le néerlandais qui a le même alpahbet que la langue anglaise)
-faire une recherche sur l'existence (et la fréquence) des digrammes propres aux langues => c'est l'approche retenue par le module guess-language
- Penser à exclure les noms propres (ou pas)
Sources:
https://pypi.python.org/pypi/guess-language -> give it a try
http://en.wikipedia.org/wiki/Letter_frequencies
http://www.letterfrequency.org/#digraph-frequency
http://stackoverflow.com/questions/3173005/how-to-detect-language
http://h6o6.com/2012/12/detecting-language-with-python-and-the-natural-language-toolkit-nltk/ (not the way to go obviously)
Bonnes dérives:
http://www.kenvanharen.com/2012/11/getting-started-with-ramp-detecting.html
http://www.kenvanharen.com/2012/11/comparison-of-semantic-role-labelers.html
*Vendredi 26
Python chunk 1: tester si une chaîne A commence bien par une chaine B
def startswith(texteSource, motif):
texteSortie = ''
for line in texteSource:
if line.startswith(motif):
texteSortie += line
return texteSortie
Python chunk 2: tester si une chaîne A commence bien par une chaine B
def slicing(texteSource, motif):
texteSortie=''
longueurMotif=len(motif)
for line in texteSource:
if line[:longueurMotif] == motif
texteSortie += line
return texteSortie
-> pour sélectionner une phrase au lieu d'une ligne : tokenizer!
Analogie du documentaire l'île aux fleurs avec la phytogénèse à Buenos-Aires
http://www.youtube.com/watch?v=JKqQVuiUDHE
Quelques spam liés à la prostitution (photos d'écran) http://dl.free.fr/pgieHgo7X
Textes de Neel Doff en ligne:
www.adashboard.org/publicdomain/neel_doff
un peu de relaxation transcendantale : http://www.taringa.net/posts/humor/14965132/La-pizzeria-Google.html
:-)
La visite rendue à Anémie dans son jardin m'a bouffé pas mal de temps mais c'était chouette!
Le repas saka-saka contre tarte aux groseilles avec Clémentine était tout aussi chouette!
*Jeudi 25
Pas mal d'idées qui ont jailli ce matin lors d'un travail initalement coçu comme une réflexion sur les persona qui a débouché sur un schéma d'ensemble, avec pistes de travail , métaphores, liste de choses à faire, planning pour les jours à venir.
cf photos sur http://www.heinry.fr/olivier/index.php/tag/litt%C3%A9rature
Ressources en ligne de programmation
• envoi d'email via SMTP http://www.blog.pythonlibrary.org/2013/06/26/python-102-how-to-send-an-email-using-smtplib-email/#more-3191 (pas utlisable à Constant sans un accès SMTP authentifié)
• packaging de modules et d'oeufs http://guide.python-distribute.org/quickstart.html
• corpus textuel de dingues extraits des CR du parlement européen en 21 langues http://www.statmt.org/europarl/
• http://pymotw.com/2/imaplib/ superbes exemples d'utilisation de la librairie imaplib de façon plus claire que la doc officielle
Clean up scanned txt document:
• choose a recent edition to scan, the conversion will be a lot better
• converting pdf to text avec options / poppler-utils: http://www.lampdeveloper.co.uk/linux/converting-a-pdf-to-text-or-html-indexing-a-pdf-file.html
• copy .txt to open office doc, select corresponding language
• make script to take out page numbers : ascending number + line break
• take out line breaks in text: https://help.libreoffice.org/Writer/Removing_Line_Breaks
Une autre solution pythonesque:
• http://pyparsing.wikispaces.com/file/view/removeLineBreaks.py/30133116/removeLineBreaks.py
Dates de naissance:
• Neel Dopp : 27 janvier 1858
*Mercredi 24
An a apporté son radio toetsenbord!
19h: Visite à Michael pour voir en marche son scanner à livres (celui qui ne tue pas les livres pour les numériser)
Après concertation avec An qui acquiesce grandement, Olivier commence la mise en place d'un module Python algolit qui aurait la structure suivante:
• algolit
• AUTHORS
• LICENCE
• dict
• __init__.py
• en
• __init__.py
• alphabet+chiffres+ponctuation
• consonnes
• voyelles
• ponctuation
• fr
• (même structure où il ne s'agit que de listes de telle sorte qu'on ne soit pas obligé de les recoder à chaque fois, mais aucune méthode)
• codec
• __init__.py
• rot13 (wrapper du built-in module codec)
• S+7
• L337 ( LEET SPEAK)
• 2 méthodes au minimum doivent être disponibles: encodage et décodage)
• tagger
• __init__.py
• treetagger (wrapper autour du treetagger de Pouplard)
• documentation sur l'installation des corpus non-disponibles dans NLTK
• ocr
• __init__.py
• méthodes à définir d'après le retour d'expérience de An avec le scan de Neel Doof
Git / code /décentralisation / Sprint / méthodes agiles
• http://scopyleft.fr/blog/2013/du-code-acentre/ exemple d'atelier dont les membres mettent leur code sous Git sans passer par un serveur central
• http://devfort.com/ un lieu isolé sans internet où se réunir pour travailler (à étudier pour les Booksprints avec l'aide d'un raspeberry pi pour l'installation d'un Etherpad par exemple
étape de création d'un dépôt local Algolit avec Git
$ cd mon_dossier
$ git init algolitCodeBase
> Initialized empty Git repository in /home/olivier/algolitCodeBase/.git/
$ cd algolitCodeBase
et voilà!
*Mardi 23
Recherches sur le spam
Arnaque au mandat cash http://www.rue89lyon.fr/2013/07/22/logement-arnaque-mandat-cash-bon-coin/
Quelques photos d'écran http://dl.free.fr/pzD7wWSaV
La législation en vigueur aux USA http://business.ftc.gov/documents/bus61-can-spam-act-compliance-guide-business
tendance connexe: le sexting http://www.catholic.org/hf/family/story.php?id=51695
Recherches sur la morphologie
http://fr.wikipedia.org/wiki/Leet_speak
Pourquoi ne pas ajouter un nouveau codec à la librairie Algolit? S+7, L33t, rot13
voir aussi la variante Leet speak Schaerbeekois: http://www.lalangueschaerbeekoise.be/w/3%20ou%20%60Ayn?tag=8
voir aussi le phénomène du volapük-encoding en russe: http://en.wikipedia.org/wiki/Volapuk_encoding utilisé par Tito, charactère cubain dans William Gibson's Spook Country http://en.wikipedia.org/wiki/Spook_Country
Recherches sur la notion d'auteur & d'éditeur
http://blog.tcrouzet.com/2013/07/22/argu-lhomme-qui-lave-les-mains/
Quelques scripts Python intéressants:
http://pythonicprose.blogspot.be dont DoubleDutch Formidable ce lien, pas mal d'exemples de codecs oulipiens
http://stdin.fr/Bazar/Disappearance nice script by Steph & Alex
Each word of a text is erased except its first occurrence. The text becomes more and more empty. Only the "original" words are visible.
http://docs.python.org/2/library/re.html#regular-expression-syntax Tout sur les expressions régulières (voir également le livre "Text Processing in Python")
p 247 de O'Reilly's Python cookbok 7.3 Generatign non-totally random passwords (application de chaîne de Markov)
Tutoriel en français de M. Swninnen qui existe également en PDF : http://python.developpez.com/cours/TutoSwinnen
Quelques libraireis python pour de la visualisation de données (un peu hors-sujet)
https://github.com/mikedewar/d3py a plotting library for python based on D3
https://github.com/wrobstory/vincent A python to Vega Translator
Transfert de pdf ocrisé vers .txt
traduction intéressante cfr blogpost http://www.adashboard.org/?p=1216
*Lundi 22
http://www.heinry.fr/olivier/index.php/post/2013/07/23/Algolit-hackathon-jour-2
catégorisation des spams collectés & indications morphologiques
• Viagra &fake tits -> -> L337 5P3AK pour passer les filtres à mots-clés
• MakeMoneyFast -> interpellation & défi, parfois empoisonnement Bayésien
• Nigeria-> longues missives à la première personne évoquant maladie/veuvage permetant de mettre la main sur un magot
• green card / bourses -> promesse de documents administratifs permettant d'immigrer
• verifyInfo -> invitation à confirmer des informations personnelles souvent bancaires sous la forme de formulaires d'entreprises de service (eau, gaz, telecom, facebook...) à l'orthographe souvent bancale
• HR -> faire miroiter un emploi en échange de quelques informations personnelles
• optInOut -> invitation à s'abonner/se désabonner (utile pour vérifier qu'une adresse générée aléatoirement existe bien)
persona liées à ces catégories
• C33s N0t3b00m, jeune homme néerlandais allant droit au but dont le business sur internet est un à-côté de son job dans la comm et le design d'applis mobile -> MMF
• Pam SSchrijver, femme manifestement allophone se faisant passer pour une néerlandaise de souche, sans papiers vivant à Amsterdam -> Nigerian Scam
• Benjamin De Beenhouwer, jeune homme flamand étudiant en médecine à Leuven aux dents si longues qu'elles rayent le plancher -> Viagra & fake tits
• Rosa Vercruysse (ex Prunelle Lacroix) femme se faisant passer pour néerlandaise de souche tout en étant manifestement africain(e) -> GreenCard / bourses
• Boniface N'Gok (Congolais) (il porte le nom d'une marque de bière locale signifiant "crocodile" dont le logo parodie celui de Lacoste) -> GreenCard / bourses
• Olivier Hendrickx, akgekomstige van Groningen, banquier au chômage ex-ING -> Human resources
• Kim Vandewinkel (bussinessman néerlandais originaire de Kerkrade qui en a marre de l'horticulture -> Verify Info
• ?? -> optInOut
persona sans lien
• N33l D00rpf -> prostitution / offres de services/mariage de jeunes femmes? -> cf An
scripts oulipiens intéressants pour algolitgit, dépôt d'écriture à la machine
- antivowel (enlève les voyelles d'un mot/texte)
- revers (rend les mots/texte en lecture right to left)
- rot13
- scrabble exercise on Code Academy pour connaître le poids d'un mot...
- censor: ex on Code Academy, remplace un mot dans une phrase par des ****
Python
http://nltk.org/api/nltk.tokenize.html
Argumentaire pro-spam
Imagine emailing 500,000 recipients and 1 out of every 1000 orders your
product, that's 500 new orders!
* We go all-out to make sure our customers are completely satisfied
* If any emails fail to make delivery, we replace them free of charge
* 100% Spam free, rest assured you will not be accused of spamming
* Almost all of our emails are sent to valid email addresses
* No software required, we do all the mailing from our own server
* Don't be fooled in signing up with similar sites offering services
that cannot compare to ours
* Get the most bang for your buck with bulk email advantage!
*
*Dimanche 21
• http://www.heinry.fr/olivier/index.php/post/2013/07/23/Algolit-hackathon-jour-1
• http://www.olats.org/livresetudes/basiques/litteraturenumerique/5_basiquesLN.php
*Vendredi 19
Scanning Neel Doff: http://www.adashboard.org/?p=1175
Documentation sur Python
http://stdin.fr/uploads/Bazar.PythonIntroduction/semaine-python.pdf
-----------
*
*Nouvelle Flore (titre provisoire)
Résumé
Les 'nouvelles fleurs' créées dans le projet 'Nouvelle Flore' sont le résultat de processus de transformations réalisées par des collaboratrices mécaniques (ici, des programmes informatiques) à partir de deux types de masses soi-disant mortes, contenant pourtant un potentiel d'activation énorme: les marées de spam journalier, d'une part, représentant 70% du trafic de courrier électronique mondial*; et la masse d'oeuvres littéraires numérisées qui se retrouvent dans le domaine public d'autre part.
Les collaboratrices mécaniques sont des scripts écrits en langage Python qui gèrent les transformations de bits & bytes de sorte que de toutes ces matières premières naissent des nouvelles créations qui puissent susciter un moment d'émotion, d'apprentissage ou le début d'un nouveau processus.
La métaphore
De la même manière que l'ortie, une plante qui pousse sur des terres riches, souvent marqueur des activités humaines, fertilise à son tour le compost et rend service à de nombreuses espèces de papillons et aux jardiniers, Olivier H & An M se sont posés la question de la valorisation de cette masse de déchets numériques afin de boucler la boucle et faire en sorte qu'ils puissent nous nourrir de nouveau.
La littérature numérisée du domaine public nous offre ces éléments transformateurs. Ces oeuvres qui se libèrent chaque année offrent une source de descriptions et d'analyses sur des sujets universels des plus riches, œuvres auxquelles on peut ajouter les ouvrages désormais directement publiés sous licence libre.
On peut catégoriser la masse de spam en circulation suivant des genres, chacun d'entre eux nous présentant virtuellement une trame narrative spécifique. Le scam nigérian par exemple se présente sous la forme d'un courrier, qui nous est adressée de la part d'une richissime personne, malheureusement malade et à l'article de la mort, richissime personne à la recherche d'un intermédiaire ou d'un gestionnaire, comme par hasard, vous. La trame se perçoit d'emblée, et de par sa forme, permet de nombreuses incrustations de textes, littéraires cette fois-ci, donnant naissance à un grand nombre de combinaisons potentielles, dans l'idée d'une Loi numérique de Lavoisier, où "rien ne se jette, rien ne s'oublie, tout se transforme".
Ces combinaisons sont exécutées par des agents baptisés collaboratrices mécaniques. Ainsi, la collaboratrice mécanique D0ff N3t3l, créatrice de la fleur 'Status sociabilis', s'est spécialisée dans la transformation d'un matériau, du scam nigérian en l’occurrence, en creusant dans l’œuvre littéraire de l'auteure Néerlandaise d'expression francophone Neel Doff*.
* Source : http://www.securelist.com/en/analysis/204792294/Spam_in_May_2013#1
* Voir http://fr.wikipedia.org/wiki/Neel_Doff
Le contexte
-Ecrire ici encore un § sur les réseaux nommé spam, les algorithmes qui les conditionnent, les programmes qui les filtrent et comment on peut interférer à ce niveau-là.
-Ecrire ici encore un § sur les réseaux nommé textes du domaine public, comment mettre un nouveau texte en ligne, le processus de numérisation (scan), de lisibilité, de correction.
Cycle de transformation de Nouvelle Flore
matériau brut 1 (Spam)
matériau brut 2 (Textes domaine public)
collecte via des honeypots collecte via des serveurs tel que le projet Gutenberg & des actions de scan
extractions des différents types de spam (optionnellement) traitement de relecture et correction post-scan
(bifurcation) afin de permettre le traitement par les collaboratrices mécaniques
voie 1: production de données statistiques et stockage de celles-ci |
voie 2: production d'un matériau de base destiné aux collaboratrices mécaniques |
(voie 2 suite) |
Opération de transformation des deux matériaux de base par les collaboratrice mécaniques
Les collaboratrices mécaniques
liste par rapport à genres de spam, processus paramoulipistes (à élaborer)
exemple d'une collaboratrice prototype existante, D0ff N3t3l (script, text, textes de source)
http://www.paulbraffort.net/litterature/alamo/alamo_experience.html
Le travail préliminaire auquel nous nous sommes livrés a consisté à collecter et consulter un corpus important de spam afin de pouvoir mettre en place une première typologie. Ont ainsi émergé les catégories suivantes une petite dizaine de catégories, chacune s'appuyant sur des ressorts humains différents et développant un formalisme propre.
Autres:
Ben De Beenhouwer - V14gr4 & Fake tits
C33s N00t3b00m - Make Money Fast/empoisonnement bayésien - va chercher des textes sur Gutenberg!
D0ff N3t3l & Pam SSchrijver - Nigerian Scam (misère, €, maladies)
Boniface N'Gok & Iris Vercruysse - Green Cards, Bourses (avec calendrier biodynamique & extraits de description de la nature/jardin/nourriture de Proust ou autre 19e cfr http://www.bio-dynamie.org)
Kim Vandewinkel - Verify Info
Olivier Hendrickx - HR & horoscopes
xxx - Opt_in/out
xxx - prostitution
Clémentine Rand-Homme - Loterie - Son ouvrage préféré: A Million Random Digits with 100,000 Normal Deviates: Book, RAND Corporation, Random number table, Roulette, Nothing up my sleeve number, Punched card, Design of experiments, Monte Carlo method by Frederic P. Miller, Agnes F. Vandome, John McBrewster.
Le droit d'auteur? La notion d'auteur?
Est-ce qu'on fait du plagiat du spam
Les représentations possibles de Herman Broodcast
- module algolit en Python
- git depository algolit en ligne
- flower parties
& à explorer:
- feuilleton sur 1 mois
- publications en POD
- CNC
- 3D print
- opt_in in social feed/web ou plugin Thunderbird
Credits
'Nouvelle Flore' est une création de Olivier Heinry & An Mertens, Constant, Bruxelles, 2013.
Oeuvres initiales:
* Neel Doff, Jours de famine et de détresse, Paris, Fasquelle, 1911; Société nouvelle des Editions Pauvert, 1974.
* The Death of the Authors, Constant, Bruxelles, 2012
www.constantvzw.org/publicdomainday
Copyleft: cette oeuvre est libre, vous pouvez la copier, la diffuser et la modifier selon les termes de la Licence Art Libre http://www.artlibre.org
Planning
-> terminer D0ff N3t3l & script spam pour une présentation le 25-1? présenter sur Raspbery PiVJ14 12 au 15 déc? ou plus tard?
-> combination avec une publication The Death of the Authors?
développement, flower parties
* emploi du temps
* étappes de développement
* financement
* collaborations
* présentations
Aperçu global du projet:
http://www.heinry.fr/olivier/public/algolit/.DSCN3326_m.jpg
Liste des choses à faire:
http://www.heinry.fr/olivier/public/algolit/.DSCN3327_m.jpg
Nourriture
- honeypot c33sn00t3b0hm@free.fr
- script qui récupère:
* adresses & noms (expéditeurs/destinateurs)
* sujet
* spamscore
* body
- Body Parsing
* identifier la langue
* sélection des spams sans images
* sélection des spams avec une certaine longueur de body?
- catégoriser le message:
analyse de substantifs et adjectifs
script qui compare ce résultat aux mots-clefs qui identifient le thème/genre
Collaboratrices mécaniques
- D0ff N3t3l:
* finaliser le script avec doc externe de fragments, loop de synonymes, création de plusieurs fichiers output, les rendre comme pdf avec no de page & création de fonctions
* finaliser la digitalisation de l'oeuvre de Neel Doff, corriger le texte 'Jours de famine...', sélectionner les fragments, rajouter au script
- Pam Sschrijver: traduction, infecte le texte (rot13)
Emballages & points de distributions
* git constant
* algolit python - workshop set-up tools & paquet debian
* txt -> pdf
* que 1000 fleurs fleurissent