ERG::datagrab

De {}
Aller à la navigation Aller à la recherche

Data grab

Session du 24/09/2018

Objectif

À partir de la page wikipédia Liste de écoles d'art en Belgique. Sur base des écoles d'art à Bruxelles construire un générateur de page wiki d'école d'art.

Étapes

  • Télécharger les pages Wikipédia des écoles d'arts de Bruxelles

"Enregistrer sous", "Page web, complète" en HTML

  • Faire un programme qui va chercher les descriptions des pages des écoles d'arts pour mélanger ces textes et faire une sorte de description "moyenne" aléatoire d'une école d'art bruxelloise.

Pour ça on a besoin de javascript dans la page HTML que l'on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C'est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l'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). Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML. À chaque fois que l'on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l'on a fourni au départ. 1datagrab 24 09 18.png

Sélectionner les blocs de textes de description. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML. On télécharge et on installe Beautiful Soup. Dans un éditeur de texte (comme Notepad++) on essaye d'ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. Problème d'encodage des caractères : le script Beautiful Soup n'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'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.

Session du 08/09/2018

Partie "Grab" / "Côté client"

Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d'input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d'encoder une suite d'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 "grab" (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:

import urllib
from bs4 import BeautifulSoup

#list of urls we use as source material

urls=['https://en.wikipedia.org/wiki/Soup',
	  'https://en.wikipedia.org/wiki/Rain']

#we request each of those url in a 'htmls' list
htmls=[]
for url in urls:
	html = urllib.urlopen(url)
	htmls.append(html.read())

#we create a 'soup' html parser objet for every html page requested
soup=[]
for html in htmls: 
	soup.append(BeautifulSoup(html, 'html.parser'))

#we put all the text between the <p> markups of those html in a .txt file
text = []
with open('text.txt', 'w') as f:
	for sp in soup:
		for tag in sp.find_all('p'):
			text.append(tag.get_text())
			f.write(tag.get_text().encode("utf-8"))

Algorythme de génération de texte

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'informatique qui s’intéresse à l'analyse et à la synthèse de texte). L'algorithme fonctionne comme ceci:

  • 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'un côté un n-grammes du texte source et de l'autre l'ensemble des caractères qui le suivent. Par exemple pour la phrase "Coucou c'est nous" et pour n=2, on a:
co -> {'u'}
ou -> {'c',' ','s'}
uc -> {'o'}
u_ -> {'c'}
c' -> {'e'}
...