Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

append() ne marche pas lorsqu'on boucle sur des objets etree ? #7

Open
Oeconomo opened this issue Jul 8, 2022 · 0 comments
Open

append() ne marche pas lorsqu'on boucle sur des objets etree ? #7

Oeconomo opened this issue Jul 8, 2022 · 0 comments

Comments

@Oeconomo
Copy link
Contributor

Oeconomo commented Jul 8, 2022

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant