forked from viennet/Referentiels
Amélioration du traitement des contenus textuels avant export markdown
This commit is contained in:
parent
bb4bd79b6d
commit
88ec2461ea
@ -1,6 +1,7 @@
|
||||
|
||||
import docx2python
|
||||
from ressourcedocx import *
|
||||
import tools
|
||||
|
||||
import logging
|
||||
|
||||
@ -64,7 +65,7 @@ for i in range(2, len(docu)): # A priori un tableau
|
||||
champ = ligne[0][0] # le nom du champ
|
||||
i = get_indice_sans_accent_ni_espace(champ, ENTETES) # l'indice de l'entete dans ENTETES
|
||||
if i != None:
|
||||
data[i] = "\n".join(res[j][1])
|
||||
data[i] = tools.caracteres_recalcitrants("\n".join(res[j][1]))
|
||||
if champ == "Prérequis" and not data[i]:
|
||||
data[i] = "aucun"
|
||||
print(f"Dans {nom_ressource}, complète les prérequis à \"aucun\"")
|
||||
@ -76,7 +77,7 @@ for i in range(2, len(docu)): # A priori un tableau
|
||||
# j+1 = les ACs par compétences
|
||||
acs = res[j+2]
|
||||
for k in range(len(acs)):
|
||||
apprentissages[k] = "\n".join(acs[k]) # fusionne les ACS (généralement sur plusieurs lignes)
|
||||
apprentissages[k] = tools.caracteres_recalcitrants("\n".join(acs[k])) # fusionne les ACS (généralement sur plusieurs lignes)
|
||||
|
||||
if non_interprete: # souvent Heures de formation (incluant les TP)
|
||||
|
||||
|
@ -69,7 +69,7 @@ for i in range(1, len(docu)): # A priori un tableau
|
||||
for j in range(len(res)): # parcours des entêtes du tableau décrivant la ressource
|
||||
ligne = res[j]
|
||||
if len(ligne) == 2: # ligne de données classique champ => valeur
|
||||
champ = ligne[0][0] # le nom du champ
|
||||
champ = caracteres_recalcitrants(ligne[0][0]) # le nom du champ
|
||||
if champ.startswith("Nom de la"):
|
||||
champ = "Titre de la" # corrige les noms/titres
|
||||
i = get_indice_sans_accent_ni_espace(champ, ENTETES_CHAPEAU) # l'indice de l'entete dans ENTETES
|
||||
@ -84,7 +84,7 @@ for i in range(1, len(docu)): # A priori un tableau
|
||||
# j+1 = les ACs par compétences
|
||||
acs = res[j+2]
|
||||
for k in range(len(acs)):
|
||||
apprentissages[k] = "\n".join(acs[k]) # fusionne les ACS (généralement sur plusieurs lignes)
|
||||
apprentissages[k] = caracteres_recalcitrants("\n".join(acs[k])) # fusionne les ACS (généralement sur plusieurs lignes)
|
||||
|
||||
if non_interprete: # souvent Heures de formation (incluant les TP)
|
||||
|
||||
@ -127,7 +127,7 @@ for i in range(1, len(docu)): # A priori un tableau
|
||||
for j in range(len(res)): # parcours des entêtes du tableau décrivant la ressource
|
||||
ligne = res[j]
|
||||
if len(ligne) == 2: # ligne de données classique champ => valeur
|
||||
champ = ligne[0][0] # le nom du champ
|
||||
champ = caracteres_recalcitrants(ligne[0][0]) # le nom du champ
|
||||
i = get_indice_sans_accent_ni_espace(champ, ENTETES_EXEMPLES) # l'indice de l'entete dans ENTETES
|
||||
if i != None:
|
||||
data[i] = "\n".join(res[j][1])
|
||||
|
@ -5,7 +5,8 @@ import ruamel.yaml
|
||||
|
||||
from modeles import get_modele, TemplateLatex
|
||||
from officiel import DATA_ACS, get_officiel_sae_name_by_code, get_officiel_ressource_name_by_code
|
||||
from ressourcedocx import caracteres_recalcitrants, remove_ligne_vide
|
||||
from ressourcedocx import remove_ligne_vide
|
||||
from tools import caracteres_recalcitrants
|
||||
|
||||
|
||||
class Ressource():
|
||||
|
@ -5,6 +5,8 @@ from officiel import supprime_accent_espace, get_code_from_nom_using_dict
|
||||
import ruamel.yaml
|
||||
from ruamel.yaml.scalarstring import FoldedScalarString as folded
|
||||
|
||||
from tools import caracteres_recalcitrants
|
||||
|
||||
__LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@ -51,9 +53,9 @@ class RessourceDocx():
|
||||
"acs": self.apprentissages,
|
||||
"sae": self.sae,
|
||||
"prerequis": self.prerequis,
|
||||
"contexte": folded(caracteres_recalcitrants(self.contexte)),
|
||||
"contenu": folded(caracteres_recalcitrants(self.contenu)),
|
||||
"motscles": caracteres_recalcitrants(self.mots) if self.mots else ""
|
||||
"contexte": folded(self.contexte),
|
||||
"contenu": folded(self.contenu),
|
||||
"motscles": self.mots if self.mots else ""
|
||||
}
|
||||
# output = yaml.dump(dico, #Dumper=yaml.Dumper,
|
||||
# sort_keys=False, allow_unicode=True)
|
||||
@ -334,17 +336,18 @@ def get_marqueur_numerique(contenu):
|
||||
return m
|
||||
|
||||
def get_marqueurs(contenus):
|
||||
"""Renvoie la liste des marqueurs (à 1 caractère) partant d'une liste de ligne"""
|
||||
"""Renvoie la liste des marqueurs (à 1 caractère) partant d'une liste de lignes (éventuellement vide)"""
|
||||
marqueurs = []
|
||||
for ligne in contenus:
|
||||
m = re.search(r"(\t)*", ligne) # des \t ?
|
||||
m = re.search(r"(\t)*", ligne) # y a-t-il des tabulations ?
|
||||
if m.group() != "":
|
||||
ajout = m.group()
|
||||
else:
|
||||
ajout = ""
|
||||
ligne = ligne.replace("\t","")[0].rstrip() # le marqueur en début de ligne (si 1 caractère)
|
||||
if ligne[0] not in string.ascii_letters and ligne[0] != "É" and ligne[0] != "/":
|
||||
marqueurs += [ajout + ligne[0]] # tous les symboles
|
||||
ligne = ligne.replace("\t","").rstrip()
|
||||
if ligne: # si la ligne n'est pas vide, cherche le marqueur en début de ligne (si 1 caractère)
|
||||
if ligne[0] not in string.ascii_letters and ligne[0] != "É" and ligne[0] != "/":
|
||||
marqueurs += [ajout + ligne[0]] # tous les symboles
|
||||
|
||||
marqueurs_finaux = [] # tri les marqueurs en supprimant les doublons et en gardant un ordre (pour détecter les sous listes)
|
||||
for m in marqueurs:
|
||||
@ -358,19 +361,22 @@ def get_marqueur(ligne, marqueurs):
|
||||
if ligne.startswith(m):
|
||||
return m
|
||||
|
||||
def nettoie_contenus(r):
|
||||
# suppression des \t
|
||||
contenu = r.contenu.replace(" / ", "/") # supprime les nbsp
|
||||
|
||||
if r.code == "R113":
|
||||
print("ici")
|
||||
|
||||
def remplace_marqueur_numerique_with_caracteres(contenu):
|
||||
"""Remplace les marqueurs numériques par des marqueurs > lorsque présents dans un contenu"""
|
||||
marqueurs_numeriques = get_marqueur_numerique(contenu)
|
||||
for m in marqueurs_numeriques: # remplace les marqueurs numériques
|
||||
contenu = contenu.replace(m, ">")
|
||||
return contenu
|
||||
|
||||
def nettoie_contenus(r):
|
||||
# suppression des \t
|
||||
contenu = r.contenu.replace(" / ", "/")
|
||||
|
||||
contenu = remplace_marqueur_numerique_with_caracteres(contenu)
|
||||
|
||||
contenus = [ligne.rstrip() for ligne in contenu.split("\n")] # les contenus
|
||||
contenus = remove_ligne_vide(contenus) # supprime les lignes vides
|
||||
# contenus = remove_ligne_vide(contenus) # supprime les lignes vides
|
||||
|
||||
marqueurs_finaux = get_marqueurs(contenus)
|
||||
|
||||
@ -388,13 +394,6 @@ def nettoie_contenus(r):
|
||||
r.contenu = contenu
|
||||
|
||||
|
||||
def caracteres_recalcitrants(contenu):
|
||||
contenu = contenu.replace("è", "è").replace("’", "'").replace("é", "é")
|
||||
contenu = contenu.replace("â", "â").replace(b'a\xcc\x82'.decode("utf8"), "â")
|
||||
contenu = contenu.replace('\xa0', ' ') # le nbsp
|
||||
return contenu
|
||||
|
||||
|
||||
class SAEDocx():
|
||||
|
||||
def __init__(self, nom, brut):
|
||||
|
@ -17,3 +17,10 @@ def get_indice_sans_accent_ni_espace(champ, entetes):
|
||||
if entete_purge in champ_purge:
|
||||
return i
|
||||
return None
|
||||
|
||||
|
||||
def caracteres_recalcitrants(contenu):
|
||||
contenu = contenu.replace("è", "è").replace("’", "'").replace("é", "é")
|
||||
contenu = contenu.replace("â", "â").replace(b'a\xcc\x82'.decode("utf8"), "â")
|
||||
contenu = contenu.replace('\xa0', ' ') # le nbsp
|
||||
return contenu
|
Loading…
Reference in New Issue
Block a user