Projets en Programmation Java

Transcription

Projets en Programmation Java
Projets en Programmation Java
Développement d’une base d’actualités
1
— éliminer les doublons, c’est-à-dire les articles associés à un même titre et une même date
Il convient de prévoir une sortie de même format que l’entrée, à savoir un fichier .csv qui ne
contient que les articles publiés dans la période demandée. Il faudra cependant ajouter une colonne
inter correspondant à l’intervalle attribué (un nombre entier). Notez que cette colonne est optionnelle
et devra pouvoir être ignorée lors de la lecture du fichier.
Objectif
L’objectif de ce projet est de participer à la mise au point une base d’actualités permettant un
certain nombre d’opérations utiles pour réaliser des actions de veille : tri en fonction de critères (date,
auteur, etc.), recherche par mots-clefs, etc. Il poursuit naturellement les exercices réalisés en TD.
2
Principe général
Avec l’arrivée d’Internet et la libération des données (projet open data), le volume d’information
n’a jamais été aussi important. Ces données sont issues des sources habituelles (pouvoirs publics,
entreprises, journalistes) mais aussi, et surtout, des utilisateurs eux-mêmes, ce que l’on appelle les
User Generated Content (UGC). Imaginez donc : 4 milliards d’actions e↵ectuées chaque jour sur
Facebook, 350 000 tweets chaque minute sur Twitter, 72 heures de vidéo ajoutées chaque minute sur
YouTube, 40 millions de nouvelles photos postées quotidiennement sur Instagram, 150 milliards de
courriels environ échangés chaque jour, plus de 800 000 sites créés. Confronté à ce volume inimaginable
de données, majoritairement textuelles mais pas seulement, il est difficile de rechercher une information
précise ou même d’avoir un aperçu de l’information qui circule sur le Web.
Dans ce contexte, des technologies ont été mises au point pour extraire l’information et l’indexer
dans des bases de données afin de pouvoir réaliser une analyse efficace de leur contenu (textuel, image,
vidéo, etc.). Ce projet est une modeste tentative de développer un système permettant de stocker des
données que l’on appelle des actualités (news en anglais), de les indexer et de réaliser des opérations
simples de recherche, par exemple à base de mots clefs. Pour cela, il sera possible de démarrer sur la
base de l’application engagée durant les travaux dirigés sur machine réalisés dans le cadre du cours et
l’améliorer de di↵érentes manières.
3
Sujets
En plus de l’application de base qui permet de charger les données (fournies) au format .csv et
de les visualiser (cf. TD), plusieurs améliorations sont envisagées. Chacune d’entre elles constituent
un projet à part entière avec une orientation bien spécifique. Ces sous-projets sont prévus pour être
connectés les uns aux autres par la suite. Ils sont détaillés ci-dessous.
3.1
Projet 1
Ce module se concentre sur le nettoyage des données et leur redécoupage temporel. Etant donné
un ensemble de fichiers textuels au format .csv (voir description ci-dessous), on souhaite pouvoir
procéder aux opérations suivantes :
— sélectionner une période temporelle cible de l’étude (par ex. du 1er au 31 juillet 2016)
— sélectionner la granularité de l’étude, caractérisée par le nombre d’intervalles dans la période
(en suivant l’exemple précédent, 4 permettrait de découper le corpus en semaines 1 )
— de manière alternative, on peut permettre à l’utilisateur de choisir les dates charnières des
di↵érents intervalles (veiller à ce qu’aucun document ne soit perdu en cours de route)
— à partir d’un ensemble de fichiers sources .csv, filtrer les articles publiés dans la période
sélectionnée et les indexer par intervalle (par ex. l’article publié le 25 juillet tombera dans
l’intervalle numéro 4)
Master Informatique 1ère année – Université Lumière (Lyon 2) c 2016
Responsable : Julien Velcin
1. Environ puisqu’il y a plus de quatre semaines entre le 1er et le 31 juillet.
3.2
Projet 2
Ce module se concentre sur l’aspect analyse temporelle des données. Etant donné un unique fichier
.csv en entrée (voir format ci-dessous), vous devez pouvoir le charger en mémoire et l’afficher sous
un format table. On souhaite pouvoir réaliser les opérations suivantes :
— afficher les données avec un système de panneau déroulant (ce qui veut dire qu’on veut pouvoir
“scroller” sur tous les articles)
— trier les articles suivant di↵érents critères (date, ordre alphabétique des titres ou des auteurs,
source)
— filtrer les articles par mot-clef (sur le titre, la description, l’auteur)
— exporter le résultat des données filtrées dans un nouveau fichier .csv au même format
— pouvoir calculer des statistiques simples d’utilisation des mots sur le corpus ainsi filtré (par ex.
le nombre d’occurrences des mots, lorsque la librairie Lucene est intégrée, éventuellement en
affichant son évolution dans le temps)
Une classe qui peut se révéler très utile est TableView car celle-ci permet de trier les données par
colonne et de faire des recherches simples. Pour aller plus loin qu’un filtre simple “plein texte”, il est
vivement conseillé d’intégrer la librairie Lucene afin de pouvoir calculer le résultat de requêtes plus
complexes (cf. cours).
3.3
Projet 3
Ce module se concentre sur l’aspect stockage et indexation des données. Comme on peut l’imaginer,
le stockage sous forme de fichiers n’est peut-être pas la meilleure solution. Du moins, d’autres formats
permettraient de communiquer plus facilement avec d’autres logiciels. C’est pourquoi l’idée ici est
de permettre le passage du format d’entrée .csv en un format relationnel classique de type EntitéAssociation. On souhaite pouvoir réaliser les opérations suivantes :
— charger les données issues du .csv et les exporter vers un format relationnel
— permettre d’exprimer des requêtes standards sur cette base de données (par ex., préciser une
période temporelle pour la date ou une liste d’auteurs)
— pouvoir ensuite exporter le résultat des requêtes dans un fichier .csv respectant le même format
— la modélisation pourra également intégrer une indexation au niveau des mots afin de pouvoir
faire des requêtes plus précises sur le contenu des articles
La connexion avec une base de données pourra se faire via la classe JDBC. Attention : comme le
projet doit pouvoir être exécuté en local sur n’importe quel type de machine, privilégiez des serveurs
légers et faciles à installer tels que sqlite. Concernant l’indexation du contenu, vous pourrez également
(comme dans le projet 2) avoir recours à Lucene afin de profiter de ses fonctionnalités.
4
Format des fichiers d’entrée
Les fichiers .csv contiennent les articles de presse avec les descripteurs de colonnes suivants :
title : le titre de l’article, généralement une phrase
description : le corps de l’article, d’une taille variable
date : la date de publication de l’article, au format : Mon, 20 Jun 2016 05 :31 :35 -0400
rss : le nom du flux RSS d’où provient l’article
author : l’auteur de l’article
link : le lien URL vers l’article en ligne
inter : le numéro d’intervalle auquel appartient l’article (issu du projet n 1, optionnel)
Afin de pouvoir manipuler les données issus de fichiers au format .csv, vous pourrez utiliser la
librairie openCSV. Cependant, essayez de prévoir les situations où ce fichier est mal formé (par exemple,
2
le nombre de colonne n’est pas le bon pour une actualité ou c’est le format de la date qui est erroné).
Dans ce cas, le mieux serait de recourir à des exceptions afin de gérer au mieux ces situations et éviter
d’ignorer ces articles lorsque leur format peut être corrigé par l’utilisateur.
Un dernier conseil est de manipuler uniquement des fichiers texte au format UTF-8 afin de ne pas
avoir de problèmes d’encodage. Ce devrait être le cas des fichiers fournis dans le cadre de ce projet.
3