See environment.yml
for dependencies.
Generate antlr4
classes from our grammar:
antlr4 -o gen -listener -visitor -Dlanguage=Python3 GrammaireSQL.g4
Versions: antlr4-python3-runtime==4.5.3
and anltr4.5.3
(compiler).
Start Flask app:
python webapp/Flask.py
Then, open http://127.0.0.1:5000/index.html
in a browser.
Gérer des requêtes portant sur les articles, éventuellement avec des contraintes de contenu et ou de temporalité.
Exemples de phrases que nous souhaitons être capables de gérer:
- Affiche-moi les articles qui contiennent des actualités.
- Afficher les articles plus vieux que 2013.
- Articles parlant d'innovation.
- Donner les articles parus en 2011.
- Donnez moi les articles sur le diabète
Ce que nous décidons de ne pas gérer:
- Toutes les aggrégations sur les auteurs des articles.
- Toutes les aggrégations sur les rubriques des articles.
- Les requêtes dont la structure (l'ordre des éléments) change complètement de celle que nous avons pour base (la première requête des exemples précedents).
Tables de la base de données http://www4.utc.fr/~lo17/faq.html#faq10
On a donc deux lexiques différents: un pour la structure des requêtes et un pour les paramètres de la partie WHERE de la requête SQL finale.
Détails sur l'algorithme du pre-parser, l'Organisateur
:
- Dans "Je
veux
article contenirafficheur
",veux
sera interprété comme un mot de la structure signifiantvouloir
, tandis queafficheur
venant après l'action devouloir
sera interprété comme un paramètre. - TODO
vouloir article contenir plastique et universite parution 2015
-- Je veux les articles qui parlent de Casablanca.
SELECT DISTINCT * FROM titre WHERE titre.mot LIKE '%casablanca%';
-- Affiche les article qui contiennent Paris
SELECT DISTINCT * FROM titre WHERE titre.mot LIKE '%paris%';
-- Combien d'articles sont parus en 2013 et contiennent cancer ?
SELECT COUNT(*) FROM titre LEFT JOIN date ON titre.fichier = date.fichier WHERE date.annee = '2013' AND titre.mot LIKE '%cancer%';
- Gérer les mots non trouvés dans le lexique dans la webapp. Les proposer pour validation au client.
- Comment intégrer le type de résultats souhaités (liste d'article, liste de rubriques, liste d'auteurs): Exemple :
- Je souhaite avoir le titre des articles parlant de technologie.
- Je veux des contacts pour Airbus
- Je veux les articles qui parlent de « l’innovation ». => 3 types de résultats différents