maintenance.bdg_mathCours
La contextualisation du dépôt de cours consiste à s'assurer que la base en graphe reflète les textes de cours et leurs méta-données locales. Ces méta-données sont définies par l'auteur c'est à dire écrites dans le dépôt local. La modification d'une méta-donnée de ce type se fait dans le dépôt et non dans la base en graphe.
Modifié le 30/03/23 @author: remy
La fonction exec()
est appelée lors de l'instanciation de la classe Maquis
. Elle maintient cette cohérence en exécutant des requêtes cypher.
Quelles sont les méta-données définies par l'auteur d'un problème?
- des index
Noeud associé à un texte de cours.
Un noeud labélisé Document
est associé à un texte de cours C
et caractérisé par sa propriété titre qui est égale au titre dans le fichier Latex et pas au nom du fichier.
Exemple pour le fichier C1616.tex.
Les premières lignes du fichier sont:
\input{courspdf.tex}
\debutcours{TFCA - Primitives et équations différentielles linéaires}{0.3 iny{ oday}}
\section{Calculs de primitives.}
Les démonstrations des résultats admis dans cette section sont proposés dans le chapitre \href{aseurl C2190.pdf}{Intégrales et primitives}.
\subsection{Définition et primitives usuelles.}
\subsubsection{Résultats admis.}
egin{defi}
Une primitive d'une fonction $f$ définie dans un intervalle $I$ à valeurs complexes est une fonction $F$ dérivable dans $I$ et dont la dérivée est $f$.
\end{defi}
Les lignes suivantes présentent la requête cypher pour extraire ce noeud
MATCH (c:Document {typeDoc:"cours", titre:"Primitives et équations différentielles linéaires"}) RETURN c
et le noeud renvoyé
{
"identity": 0,
"labels": [
"Document"
],
"properties": {
"date": "2013-10-03T06:00:57Z",
"titre": "Primitives et équations différentielles linéaires",
"typeDoc": "cours",
"urlSrc": "https://github.com/nicolair/math-cours/blob/master/C1616.tex",
"discipline": "mathématiques",
"url": "https://maquisdoc-math.fra1.digitaloceanspaces.com/math-cours/C1616.pdf"
},
"elementId": "0"
}
Index définis dans un texte de cours.
Les index sont définis dans la source LateX par la commande \index
. Lors de la compilation, un fichier .idx
est créé qui permet localement d'associer l'index et le texte de cours. Du côté de la base en graphe, un index est un noeud labelisé Concept
. Une arête labélisée INDEXE
issue du noeud associé au texte de cours pointe vers le noeud associé à l'index.
1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3""" 4La contextualisation du dépôt de cours consiste à s'assurer que la base en graphe reflète les textes de cours et leurs méta-données locales. Ces méta-données sont définies par l'auteur c'est à dire écrites dans le dépôt local. La modification d'une méta-donnée de ce type se fait dans le dépôt et non dans la base en graphe. 5 6Modifié le 30/03/23 @author: remy 7 8La fonction `exec()` est appelée lors de l'instanciation de la classe `Maquis`. Elle maintient cette cohérence en exécutant des requêtes cypher. 9 10Quelles sont les méta-données définies par l'auteur d'un problème? 11- des index 12 13#### Noeud associé à un texte de cours. 14 15Un noeud labélisé `Document` est associé à un texte de cours `C` et caractérisé par sa propriété titre qui est égale au titre dans le fichier Latex et pas au nom du fichier. 16Exemple pour le fichier C1616.tex. 17Les premières lignes du fichier sont: 18 \input{courspdf.tex} 19 20 \debutcours{TFCA - Primitives et équations différentielles linéaires}{0.3 \tiny{\today}} 21 22 \section{Calculs de primitives.} 23 Les démonstrations des résultats admis dans cette section sont proposés dans le chapitre \href{\baseurl C2190.pdf}{Intégrales et primitives}. 24 25 \subsection{Définition et primitives usuelles.} 26 \subsubsection{Résultats admis.} 27 \begin{defi} 28 Une primitive d'une fonction $f$ définie dans un intervalle $I$ à valeurs complexes est une fonction $F$ dérivable dans $I$ et dont la dérivée est $f$. 29 \end{defi} 30 31Les lignes suivantes présentent la requête cypher pour extraire ce noeud 32 33 MATCH (c:Document {typeDoc:"cours", titre:"Primitives et équations différentielles linéaires"}) RETURN c 34 35et le noeud renvoyé 36 37 { 38 "identity": 0, 39 "labels": [ 40 "Document" 41 ], 42 "properties": { 43 "date": "2013-10-03T06:00:57Z", 44 "titre": "Primitives et équations différentielles linéaires", 45 "typeDoc": "cours", 46 "urlSrc": "https://github.com/nicolair/math-cours/blob/master/C1616.tex", 47 "discipline": "mathématiques", 48 "url": "https://maquisdoc-math.fra1.digitaloceanspaces.com/math-cours/C1616.pdf" 49 }, 50 "elementId": "0" 51 } 52 53#### Index définis dans un texte de cours. 54 55Les index sont définis dans la source LateX par la commande `\index`. Lors de la compilation, un fichier `.idx` est créé qui permet localement d'associer l'index et le texte de cours. Du côté de la base en graphe, un index est un noeud labelisé `Concept`. Une arête labélisée `INDEXE` issue du noeud associé au texte de cours pointe vers le noeud associé à l'index. 56 57""" 58import neo4j 59 60def exec(self): 61 """ 62 Exécution des requêtes spécifques de maintenance de la base. 63 - récupération des descriptions dans la base 64 - supprimer dans la base les problèmes absents localement 65 - créer dans la base les problèmes locaux manquants 66 - si description locale et distante différentes, 67 - copier description locale sur distante 68 - afficher les indexations locales 69 70 #### Renvoie 71 72 log: str journal 73 74 """ 75 print("coucou de exec() dans bdg_mathCours.py") 76 77 data = self.connect_data 78 URI = data['credentials']['URI'] 79 user = data['credentials']['user'] 80 password = data['credentials']['password'] 81 AUTH = (user, password) 82 83 loc_indexations = self.specific_results['indexations'] 84 loc_titres = self.specific_results['titres'] 85 print("\n Titres des textes de cours locaux") 86 print(loc_titres) 87 88 # noeuds textes de cours 89 param = {'label' : "Document", 90 'propsF' :'{typeDoc:"cours", discipline:"mathématique"}', 91 'propsR' : 'substring(n.urlSrc,51), n.titre'} 92 req = self.format_cypher_RETURN(param) 93 with neo4j.GraphDatabase.driver(URI, auth=AUTH).session(database="neo4j") as session: 94 rem_cours = session.execute_read(self.do_cypher_tx, req) 95 print("\n Titres des noeuds textes de cours") 96 rem_cours.sort(key=lambda paire: paire[0]) 97 print(rem_cours) 98 99 # Nbs de textes de cours 100 blabla = "\n Nbs de textes de cours. local: {nloc}, base: {nrem}" 101 blabla = blabla.format( 102 nloc= len(loc_titres), nrem=len(rem_cours)) 103 print(blabla) 104 105 # indexations 106 indexe(self,loc_indexations) 107 108 109 log = "" 110 return log 111 112def indexe(self, loc_indexations): 113 ''' 114 Assure que des relations `INDEXE` sont associées aux indexations locales. 115 ''' 116 print("\n coucou de indexe()") 117 data = self.connect_data 118 URI = data['credentials']['URI'] 119 user = data['credentials']['user'] 120 password = data['credentials']['password'] 121 AUTH = (user, password) 122 123 # indexations dans le graphe 124 req = ''' MATCH (p:Document {typeDoc:"cours"}) -[:INDEXE]-> (c:Concept) 125 RETURN "A" + p.titre, c.litteral 126 ''' 127 #print(req) 128 with neo4j.GraphDatabase.driver(URI, auth=AUTH).session(database="neo4j") as session: 129 rem_indexations = session.execute_write(self.do_cypher_tx, req) 130 131 print("\n Indexations dans le graphe") 132 print(rem_indexations) 133 print("\n Indexations locales: {0}".format(len(loc_indexations))) 134 print(loc_indexations) 135""" 136 # création des indexations manquantes dans le graphe 137 req = ''' MATCH (p:Document {{typeDoc:"problème", titre: "{0}"}}) 138 MERGE (c:Concept {{litteral:"{1}"}}) 139 CREATE (p)-[:INDEXE]->(c) 140 ''' 141 rem_index_orph = [] 142 for index in loc_indexations : 143 if index not in rem_indexations: 144 nom = index[0][1:] 145 concept = index[1] 146 req1 = req.format(nom, concept) 147 print(nom, concept, req1) 148 with neo4j.GraphDatabase.driver(URI, auth=AUTH).session(database="neo4j") as session: 149 val = session.execute_write(self.do_cypher_tx, req1) 150 151"""
61def exec(self): 62 """ 63 Exécution des requêtes spécifques de maintenance de la base. 64 - récupération des descriptions dans la base 65 - supprimer dans la base les problèmes absents localement 66 - créer dans la base les problèmes locaux manquants 67 - si description locale et distante différentes, 68 - copier description locale sur distante 69 - afficher les indexations locales 70 71 #### Renvoie 72 73 log: str journal 74 75 """ 76 print("coucou de exec() dans bdg_mathCours.py") 77 78 data = self.connect_data 79 URI = data['credentials']['URI'] 80 user = data['credentials']['user'] 81 password = data['credentials']['password'] 82 AUTH = (user, password) 83 84 loc_indexations = self.specific_results['indexations'] 85 loc_titres = self.specific_results['titres'] 86 print("\n Titres des textes de cours locaux") 87 print(loc_titres) 88 89 # noeuds textes de cours 90 param = {'label' : "Document", 91 'propsF' :'{typeDoc:"cours", discipline:"mathématique"}', 92 'propsR' : 'substring(n.urlSrc,51), n.titre'} 93 req = self.format_cypher_RETURN(param) 94 with neo4j.GraphDatabase.driver(URI, auth=AUTH).session(database="neo4j") as session: 95 rem_cours = session.execute_read(self.do_cypher_tx, req) 96 print("\n Titres des noeuds textes de cours") 97 rem_cours.sort(key=lambda paire: paire[0]) 98 print(rem_cours) 99 100 # Nbs de textes de cours 101 blabla = "\n Nbs de textes de cours. local: {nloc}, base: {nrem}" 102 blabla = blabla.format( 103 nloc= len(loc_titres), nrem=len(rem_cours)) 104 print(blabla) 105 106 # indexations 107 indexe(self,loc_indexations) 108 109 110 log = "" 111 return log
Exécution des requêtes spécifques de maintenance de la base.
- récupération des descriptions dans la base
- supprimer dans la base les problèmes absents localement
- créer dans la base les problèmes locaux manquants
- si description locale et distante différentes,
- copier description locale sur distante
- afficher les indexations locales
Renvoie
log: str journal
113def indexe(self, loc_indexations): 114 ''' 115 Assure que des relations `INDEXE` sont associées aux indexations locales. 116 ''' 117 print("\n coucou de indexe()") 118 data = self.connect_data 119 URI = data['credentials']['URI'] 120 user = data['credentials']['user'] 121 password = data['credentials']['password'] 122 AUTH = (user, password) 123 124 # indexations dans le graphe 125 req = ''' MATCH (p:Document {typeDoc:"cours"}) -[:INDEXE]-> (c:Concept) 126 RETURN "A" + p.titre, c.litteral 127 ''' 128 #print(req) 129 with neo4j.GraphDatabase.driver(URI, auth=AUTH).session(database="neo4j") as session: 130 rem_indexations = session.execute_write(self.do_cypher_tx, req) 131 132 print("\n Indexations dans le graphe") 133 print(rem_indexations) 134 print("\n Indexations locales: {0}".format(len(loc_indexations))) 135 print(loc_indexations)
Assure que des relations INDEXE
sont associées aux indexations locales.