Différences entre les versions de « ERG::datagrab »
Ligne 60 : | Ligne 60 : | ||
=== Algorythme de génération de texte === | === Algorythme de génération de texte === | ||
+ | |||
+ | == Communication entre l'algorithme et la partie Grab == | ||
+ | |||
+ | Pour que l'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. | ||
+ | |||
+ | == Fonctionnement de l'algorithme == | ||
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 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: |
Version du 8 octobre 2018 à 08:24
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.
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
Communication entre l'algorithme et la partie Grab
Pour que l'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.
Fonctionnement de l'algorithme
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 peuvent le suivre. 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'}
...