You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dans la fonction suivante, j'ai défini une liste vide "problèmes" qui est censée être alimentée par des chaînes résultant d'une itération d'objets etree. Cependant, la liste en return est vide, ce qui ne correspond pas au comportement attendu (les print() ont bien lieu quant à eux). la méthode append() semble ne pas alimenter la liste à chaque itération ; on dirait que cela n'a lieu qu'à la fin de la boucle, une seule fois. Je me demande si cela résulte des objets etree, mais je ne comprend pas pourquoi.
Dans le code qui suit, les commentaires "TODO" indiquent les sections à examiner.
def check_strings(fichier):
"""
Fonction qui permet, pour un alto donné, de vérifier sa bonne formation et de la corriger si elle est mauvaise.
Légèrement adapté d'un script produit par Claire Jahan.
:param fichier: chemin du fichier à vérifier
:return problemes:
:type problemes: list
"""
NS = {'alto': 'http://www.loc.gov/standards/alto/ns-v4#'}
file = ET.parse(fichier)
root = file.getroot()
# on selectionne le troisième ensemble de balises du fichier, appelé "layout", et on va boucler sur chaque niveau
layout = root[2]
# on récupère l'identifiant des DefaultLine, qui correspondent aux balises TextLine
tagref_default = file.xpath("//alto:OtherTag[@LABEL='DefaultLine']/@ID", namespaces=NS)[0]
# TODO pourquoi la méthode append() ne marche pas ici dans les itérations qui suivent pour la liste problemes ?
# TODO c'est les objets etree qui posent problème pour cela ? les variables probleme* sont imprimées comme attendu
# TODO mais l'appen semble n'avoir lieu qu'après la fin de l'ensemble des itérations et non pas une après l'autre, donc la liste reste vide
problemes = []
problemes_dic = {}
# pour chaque balise page
for page in layout:
# pour chaque balise printspace contenue dans les page
for printspace in page:
# pour chaque balise textblock contenue dans les printspace
for textblock in printspace:
# on vérifie si des textblock sont mal ou pas référencées
# (le script les mets de côté, il est donc important de vérifier s'ils contiennent des informations à extraire)
if textblock.get("ID") == "eSc_dummyblock_":
probleme1 = "\tLe fichier contient une balise TextBlock '" + textblock.get("ID") + \
" ; celle ci n'est pas conforme à l'ontologie du projet. " + \
"\n\tSi elle contient des informations à extraire, il faut la supprimer et mettre le contenu dans un TextBlock conforme."
problemes.appeend(probleme1)
problemes_dic[textblock.get("ID")] = probleme1
print(problemes_dic)
print(probleme1)
elif textblock.get("TAGREFS") == None:
probleme2 = "\tLe fichier contient une balise TextBlock '" + textblock.get("ID") + \
"' sans TAGREF, donc non associé à l'ontologie du projet."
problemes.append(probleme2)
print(probleme2)
elif textblock.get("TAGREFS") == "BT":
probleme3 = "\tLe fichier contient une balise TextBlock '" + textblock.get("ID") + \
"' dont l'attribut TAGREF est incomplet. " + \
"\n\tS'il contient des informations à extraire, il faut le compléter pour l'associer à l'ontologie du projet."
problemes.append(probleme3)
print(probleme3)
print(problemes_dic)
for page in layout:
# pour chaque balise printspace contenue dans les page
for printspace in page:
# pour chaque balise textblock contenue dans les printspace
for textblock in printspace:
# pour chaque balise textline contenue dans les textblock
for textline in textblock:
if textline.tag == "{http://www.loc.gov/standards/alto/ns-v4#}TextLine":
# si la balise contient un attribut TAGREFS conforme, tout va bien
if textline.get("TAGREFS") == tagref_default:
pass
# autrement, on le signale dans le terminal
else:
probleme4 = "\tle fichier contient une balise TextLine '" + textline.get("ID") + \
"' sans TAGREF correspondant à l'ontologie du projet."
problemes.append(probleme4)
print(probleme4)
# TODO la liste retournée est vide !
return problemes
The text was updated successfully, but these errors were encountered:
Dans la fonction suivante, j'ai défini une liste vide "problèmes" qui est censée être alimentée par des chaînes résultant d'une itération d'objets etree. Cependant, la liste en return est vide, ce qui ne correspond pas au comportement attendu (les print() ont bien lieu quant à eux). la méthode append() semble ne pas alimenter la liste à chaque itération ; on dirait que cela n'a lieu qu'à la fin de la boucle, une seule fois. Je me demande si cela résulte des objets etree, mais je ne comprend pas pourquoi.
Dans le code qui suit, les commentaires "TODO" indiquent les sections à examiner.
The text was updated successfully, but these errors were encountered: