Trois cours pour voyager du .split() aux ontologies OWL,
en passant par TF-IDF, les embeddings, Prolog, Turtle, et SPARQL.
Avec humour, culture, et du code qui marche.
Au début, il y avait le texte. Des fichiers. Des mots. On les a découpés, comptés, pondérés, projetés dans l'espace. Puis on s'est dit : « Et si on comprenait ce que les mots veulent dire, plutôt que juste les compter ? »
Ce cours est une réponse à cette question. En trois actes, on va construire ensemble un moteur de recherche sémantique complet, de la tokenisation à l'ontologie OWL en passant par Prolog, les embeddings, et SPARQL. Tout est en Python. Tout est expliqué. Rien n'est laissé dans la boîte noire.
Le premier cours pose les fondations : comment passer du texte brut à un moteur de recherche qui classe les documents par pertinence.
.split(), stopwords, le début de tout.
Le cœur de tout moteur de recherche.
ET, OU, parenthèses — un parseur complet.
Ramener « chemins », « chemine » à « chemin ».
Pondérer les mots qui comptent vraiment.
TF-IDF sous stéroïdes (k₁=1.5, b=0.75).
De Skip-gram à Word2Vec.
Recherche sémantique complète.
Code : recherche.py —
Voir le cours complet →
Le deuxième cours change de paradigme : on ne compte plus les mots, on structure la connaissance en triplets (sujet-verbe-complément). On construit un mini-Prolog, un parseur Turtle, et on explore l'unification logique.
Socrate est_un homme. Homme est mortel.
Navigation et inférence par héritage.
Faire correspondre des motifs avec variables.
Chaînage avant : règles + faits → conclusions.
Parseur de .pl : on écrit comme du vrai Prolog.
Le standard du web sémantique pour les triplets.
Code : raisonnement.py —
Voir le cours complet →
Le troisième cours ajoute la logique formelle : classes, propriétés, restrictions, constructeurs ⊓ ⊔ ¬ ∃ ∀. On construit un mini-raisonneur OWL, on utilise Owlready2 avec HermiT, et on déploie un serveur SPARQL (mini Fuseki) avec interface web.
Chien ⊑ Animal ⊑ ÊtreVivant. Héritage multiple.
Domaine, range, inférence de types.
∃ mange.Viande, ∀ mange.Végétal, cardinalités.
⊓ ⊔ ¬ — l'algèbre des concepts.
Classification + vérification de cohérence.
HermiT, ontologies réelles. Le vrai OWL.
Le Hello World d'OWL. Avec fromage.
Interroger le graphe. Serveur web. API REST.
Code : mini_fuseki.py + raisonnement.py —
Voir le cours complet →
Un sujet de Travaux Dirigés accompagne les cours #2, #3 et #4. De la modélisation de triplets à la requête SPARQL, en passant par l'unification, Prolog, OWL, les constructeurs logiques et le déploiement : tout y est.
Triplets, graphe, unification, Prolog, Turtle. La base logique.
OWL, classes, restrictions, constructeurs, Owlready2, raisonneur.
SPARQL, CONSTRUCT, API REST, serveur Fuseki, déploiement CI/CD.
Un sujet d'examen couvre les cours #2, #3 et #4. QCM, triplets, Prolog, OWL, SPARQL — de quoi vérifier que la sémantique n'a plus de secrets pour toi.
Un Makefile est fourni pour lancer chaque application d'une simple commande. Inutile de se souvenir des chemins ou des options :
makeAffiche l'aidemake prepareTélécharge les code depuis semantic.lambda-flow.frmake rechercheLance le moteur de recherche (cours #1)make prologLance le mini-Prolog (cours #2)make raisonnementLance Owlready2 (cours #3)make serveurLance le serveur SPARQL sur :8080make fusekiSynonyme de make serveurmake webLance le serveur Flask sur :5000make allExécute toutes les démosmake cleanNettoie les caches PythonMakefile est plus vieux
que la plupart des étudiants. Inventé en 1976 par Stuart Feldman
(un des premiers hackers des Bell Labs), il servait à compiler des programmes
C. Aujourd'hui, il sert à tout : lancer des tests, déployer des sites,
et — dans notre cas — faire de la sémantique en une commande.
C'est ça, la puissance de la compatibilité ascendante.
| Fichier | Rôle | Cours | Commande |
|---|---|---|---|
recherche.py |
Moteur de recherche : TF-IDF, BM25, embeddings, Whoosh, Flask | #1 | python recherche.py |
raisonnement.py |
Mini OWL/Prolog : classes, restrictions, unification, Owlready2 | #2 & #3 | python raisonnement.py |
mini_fuseki.py |
Serveur SPARQL : stockage RDF, parseur Turtle, interface web | #3 | python mini_fuseki.py --exemple |
Makefile |
Orchestrateur des commandes | — | make <commande> |
cours_web_semantique.html |
Support du cours #1 | #1 | Ouvrir dans un navigateur |
cours_web_semantique_2.html |
Support du cours #2 | #2 | Ouvrir dans un navigateur |
cours_web_semantique_3.html |
Support du cours #3 | #3 | Ouvrir dans un navigateur |
td_web_semantique.html |
Sujet de Travaux Dirigés (24 exercices) | #2 à #4 | Ouvrir dans un navigateur |
correction_td_web_semantique.html |
Correction complète des 24 exercices | #2 à #4 | Ouvrir dans un navigateur |
Ces trois cours forment un parcours cohérent. Chacun peut être lu indépendamment, mais ils se complètent :
.split() aux embeddings
« Je sais découper du texte, pondérer des mots et calculer des similarités vectorielles. »
« Je sais structurer la connaissance en triplets, unifier des termes et implémenter un mini-Prolog. »
« Je sais modéliser une ontologie, la raisonner avec OWL, et l'interroger avec SPARQL. »
pip install scikit-learn. »
— Lao Tseu (réécriture pour informaticiens)