Skip to content

Amyantis/LO17Grammaire

Repository files navigation

Setup

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).

Webapp

Start Flask app:

python webapp/Flask.py

Then, open http://127.0.0.1:5000/index.html in a browser.

Description des objectifs

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).

Documentation

Tables de la base de données http://www4.utc.fr/~lo17/faq.html#faq10

Architecture

Architecture overview: alt text

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.

Pre-parser

Statégie du pre-parser: alt text

Détails sur l'algorithme du pre-parser, l'Organisateur:

  • Dans "Je veux article contenir afficheur", veux sera interprété comme un mot de la structure signifiant vouloir, tandis que afficheur venant après l'action de vouloir sera interprété comme un paramètre.
  • TODO

Grammaire Antlr

Exemple d'arbre

vouloir article contenir plastique et universite parution 2015

alt text

Exemples de requête qui fonctionnent:

-- 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%';

TODO:

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published