From 8fad2e9ea13b5d82140b3ab56b9cb24a0d9e5253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20Baras?= Date: Mon, 29 Mar 2021 17:25:16 +0200 Subject: [PATCH] =?UTF-8?q?Ajoute=20l'extraction=20des=20apprentissages=20?= =?UTF-8?q?critiques=20en=20se=20basant=20sur=20les=20noms/codes=20officie?= =?UTF-8?q?ls=20donn=C3=A9s=20dans=20acs.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/export.py | 16 ++++++++++++++++ python/pn/acs.yml | 20 ++++++++++++++++++++ python/ressource.py | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 python/pn/acs.yml diff --git a/python/export.py b/python/export.py index 138cdaf..bbaa6e1 100644 --- a/python/export.py +++ b/python/export.py @@ -142,6 +142,22 @@ for r in RESSOURCES: if r.code: r.nom = DATA_RESSOURCES[r.semestre][r.code] + # Remet en forme les ACs + acs = r.apprentissages + if len(acs) != 3: + __LOGGER.warning(f"Problème dans le nombre de compétences de {r.nom}") + for comp in range(3): + donnees = acs[comp] # chaine de caractères listant les ACS + # donnees = donnees.replace("\t", "").replace("-", "") # supprime les tabulations + acs_avec_code = devine_acs_by_code(donnees) + acs_avec_nom = devine_acs_by_nom(donnees) + acs_finaux = sorted(list(set(acs_avec_code + acs_avec_nom))) + r.apprentissages[comp] = acs_finaux + +# ************************************************************************ +# Affichages divers + + # Bilan des heures & Calcul somme des heures ligne = "{:20s} | {:75s} | {:10s} | {:10s} |" trait = "-"*len(ligne.format("", "", "", "")) diff --git a/python/pn/acs.yml b/python/pn/acs.yml new file mode 100644 index 0000000..d7fd2b4 --- /dev/null +++ b/python/pn/acs.yml @@ -0,0 +1,20 @@ +RT1: + AC111: "Maîtriser les lois fondamentales de l'électricité afin d'intervenir sur des équipements de réseaux et télécommunications" + AC112: "Comprendre l'architecture des systèmes numériques et les principes du codage de l'information" + AC113: "Configurer les fonctions de base du réseau local" + AC114: "Maîtriser les rôles et les principes fondamentaux des systèmes d'exploitation afin d'interagir avec ceux-ci pour la configuration et administration des réseaux et services fournis" + AC115: "Identifier les dysfonctionnements du réseau local" + AC116: "Installer un poste client" +RT2: + AC211: "Mesurer et analyser les signaux" + AC212: "Caractériser des systèmes de transmissions élémentaires et découvrir la modélisation mathématique de leur fonctionnement" + AC213: "Déployer des supports de transmission" + AC214: "Connecter les systèmes de ToIP" + AC215: "Communiquer avec un client ou un collaborateur" +RT3: + AC311: "Utiliser un système informatique et ses outils" + AC312: "Lire, exécuter, corriger et modifier un programme" + AC313: "Traduire un algorithme, dans un langage et pour un environnement donné" + AC314: "Connaître l'architecture et les technologies d'un site Web" + AC315: "Choisir les mécanismes de gestion de données adaptés au développement de l'outil" + AC316: "S'intégrer dans un environnement propice au développement et au travail collaboratif" diff --git a/python/ressource.py b/python/ressource.py index 7a0b84c..d59d865 100644 --- a/python/ressource.py +++ b/python/ressource.py @@ -6,8 +6,12 @@ import unicodedata __LOGGER = logging.getLogger(__name__) +# Récupère les informations officielles sur les ressources (code/nom) with open("pn/ressources.yml", 'r', encoding="utf8") as fid: DATA_RESSOURCES = yaml.load(fid.read(), Loader=yaml.Loader) +# Récupère les données officielles des ACs +with open("pn/acs.yml", 'r', encoding="utf8") as fid: + DATA_ACS = yaml.load(fid.read(), Loader=yaml.Loader) class Ressource(): def __init__(self, nom, brute): @@ -66,8 +70,33 @@ def get_code_from_nom(ressource): if nom.startswith(nom_data): return code +def devine_acs_by_code(champ): + """Recherche les codes ressources de la forme ACXXX ou AC0XXX dans champ ; + ramène les codes AC0XXX à 3 chiffres. + """ + codes3 = re.findall(r"(AC[0-9][0-9][0-9]\D)", champ) # de code à 3 chiffres + codes4 = re.findall(r"(AC0[0-9][0-9][0-9])", champ) -for sem in DATA_RESSOURCES: - for code in DATA_RESSOURCES[sem]: - nom_data = supprime_accent_espace(DATA_RESSOURCES[sem][code]) - print(nom_data) + codes3 += [ "AC" + c[-3:] for c in codes4] # supprime le 0 des acs (codage AC0111) + return sorted(list(set(codes3))) + +def devine_acs_by_nom(donnees): + """Partant d'une chaine de caractères, détermine les codes des ACS + présent dans la donnée, en utilisant les infos officielles de + acs.yml""" + acs = [] + donnees_purge = supprime_accent_espace(donnees) + + for comp in DATA_ACS: + for code in DATA_ACS[comp]: + acs_purge = supprime_accent_espace(DATA_ACS[comp][code]) + if acs_purge in donnees_purge: + acs += [code] + return sorted(list(set(acs))) + +if __name__=="__main__": + # Eléments de test + for sem in DATA_RESSOURCES: + for code in DATA_RESSOURCES[sem]: + nom_data = supprime_accent_espace(DATA_RESSOURCES[sem][code]) + print(nom_data)