Une ontologie représentant les émotions dans des textes littéraires.
Ce projet a été réalisé dans le cadre du cours "Programmation pour le Web sémantique" de Davide Picca (SLI, Lettres, UNIL) au printemps 2024.
Ce projet cherche à représenter les émotions dans un texte littéraire en créant une ontologie à l'aide du logiciel Protégé.
Nous utilisons ensuite des LLMs (ici ChatGPT) pour annoter nos textes puis des scripts python pour peupler notre ontologie.
-
Identification des émotions et informations que nous souhaitons recenser dans notre ontologie.
-
Alignement avec des ontologies existantes et récupération de classes et de propriétés intéressantes pour notre cas.
-
Création d'une hiérarchie de classe dans notre ontologie.
-
Développement de prompts permettant d'extraire les informations nécessaires au peuplement de notre ontologie.
-
Développement de scripts permettant l'ajouts de nos individus dans l'ontologie.
-
Création d'une deuxième ontologie étendue à partir des résultats de ChatGPT.
| Dossier | Contenu |
|---|---|
| Data | Contient les données intermédiaires au format JSON utilisées dans ce projet |
| Doc | Documentation concernant la construction de notre ontologie ainsi que de nos réflexions théoriques autour d'une ontologie des émotions littéraires |
| Ontology | Contient une première version de notre ontologie, créée avec Protégé owlready2 ainsi qu'une deuxième qui résulte des sorties de ChatGPT et qui est créée par le script clean_prepare_for_rdf.py |
| Outputs | Contient les deux versions d'ontologies peuplées par le script build_populated_ontology.py qui repose sur la librairie rdflib |
| Project guidelines | Contient le README.md officiel de la donnée du projet |
| Prompts | Contient différents itérations de la construction de nos prompts |
| Queries | Conient un script python qui exécute des requêtes SPARQL sur notre ontologie |
| Scripts | Contient les scripts conçus pour traiter nos données |
| Texts | Contient les textes utilisés pour peupler notre ontologie |
Ce dossier contient les éléments suivants:
annotations: Contient les résultats de nos prompts appliqués aux textes de notre corpus et corrigés à certains endroits par nos soinsannotations_cleaned: Contient les annotations corrigées par le scriptclean_prepare_for_rdf.pyqui sont ensuite utilisées pour peupler l'ontologiechunks: Contient les textes découpés pour être passés dans ChatGPT
ask_chatgpt.py: Annote les morceaux de textes envoyés à l'API ChatGPT et nous indique si certains fichiers doivent être corrigés à la mainbuild_populated_ontology.py: Itère sur toutes les annotations deannotations_cleanedpour créer des individus et les injecter dans les ontologiesontology.owletontology_extended.owlclean_prepare_for_rdf.py: Normalise les noms afin qu'ils puissent être utilisés pour des URIs (typiquement en remplaçant les espaces par des underscores), et reconstruit la structure souhaitée là où ChatGPT s'éloigne du modèle.cut_text.py: Prépare l'annotation en (1) coupant les fichiers textes après un certain nombre de caractères et (2) construisant des séquences de messages adaptés à l'analyse par ChatGPT.uniquiser_ids.py: Construit des IDs utilisés pour les URIs et construit les liens entre les entités disjointes (pour des raisons techniques) au cours de l'annotation.
-
Cloner ce repository
-
Créer un environnement virtuel et l'activer
-
Installer le fichier
requirements.txtdepuis un terminal :- Unix/macOS:
python3 -m pip install -r requirements.txt - Windows:
py -m pip install -r requirements.txt
- Unix/macOS:
Pour répliquer nos résultats (en partant de ontology/ontology.owl) :
- Exécuter
clean_prepare_for_rdf.pypour créer l'ontologie étendueontology_extended.owl - Exécuter
cut_text.pypour séparer les textes en vue de leur passage dans l'API de ChatGPT - Exécuter
ask_chatgpt.pypour obtenir les fichiers JSON puis les vérifier - Exécuter
uniquiser_ids.pypour standardiser les IDs des objets de nos fichiers JSON - Exécuter
build_populated_ontology.pypour créer les deux versions d'ontologies peuplées
- annotated-types==0.7.0
- anyio==4.3.0
- certifi==2024.2.2
- distro==1.9.0
- h11==0.14.0
- httpcore==1.0.5
- httpx==0.27.0
- idna==3.7
- isodate==0.6.1
- openai==1.30.3
- owlready2==0.46
- pydantic==2.7.1
- pydantic_core==2.18.2
- pyparsing==3.1.2
- rdflib==7.0.0
- six==1.16.0
- sniffio==1.3.1
- tqdm==4.66.4
- typing_extensions==4.12.0
Ce projet a été réalisé par:
- Zakari Rabet
- Amélie McCormick
- Annaël Madec-Prévost
- Thibault Ziegler
- Johan Cuda
Développé à l'aide de la communauté Python et Protégé, ainsi qu'avec le soutien de ChatGPT.