IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

scribus et la bibliothèque pyscribus pour python, comment extraire les textes des pages


Sujet :

Python

  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut scribus et la bibliothèque pyscribus pour python, comment extraire les textes des pages
    Bonjour,

    Je cherche a lire un fichier scribus afin d extraire les divers texte présent sur chaque page.
    Hors je ne parviens pas identifier la méthode pour y parvenir dans la Doc.


    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    fichier = r"D:\nodrive\Document-1.sla"
     
     
    def traduire_texte(texte):
        # Remplacer cette fonction par la logique de traduction réelle
        return texte.upper()  # Exemple simpliste de "traduction"
     
     
     
    # Vérifier si le fichier existe
    if not os.path.exists(fichier):
        print("Le fichier n'existe pas.")
        exit()
     
    # Charger le fichier Scribus
    try:
        print("Chargement du document Scribus...")
        doc_original = psf.ScribusFile("1.5.5", fichier)
        print("Document chargé avec succès.")
        # Extraire les objets de texte et traduire
        for page in doc_original.pageobjects:
            if isinstance(page, psf.model.pageobjects.TextObject):
                text_original = " ".join([story.text for story in page.stories])
                text_traduit = traduire_texte(text_original)
                print(f"Texte original: {text_original}\nTexte traduit: {text_traduit}")
                # Vous pourriez stocker les traductions pour une utilisation dans la nouvelle création de document
     
     
     
        # Créer un nouveau document Scribus
        nouveau_doc = psf.ScribusFile("1.5.5")
        # Ajouter les éléments traduits...
        # Cette partie dépend de la manière dont vous voulez structurer votre nouveau document
        # et nécessite une compréhension approfondie de l'API pyscribus pour manipuler les éléments de page
     
        # Enregistrer le nouveau document
        nouveau_chemin = r"D:\nodrive\traduit.sla"
        nouveau_doc.save(nouveau_chemin)
        print(f"Nouveau document enregistré à : {nouveau_chemin}")
     
     
    except Exception as e:
        print(f"Erreur lors du chargement du document : {e}")
        exit()

    Le programme provoque Erreur lors du chargement du document : module 'pyscribus.file' has no attribute 'model'


    La documentation de la librairie pip pyscribus https://etnadji.fr/pyscribus/arle des objets TextObject.

    Cette bibliothèque semble adaptée à la lecture, on peut ainsi lire un fichier scribus est identifié les types de documents d une page, images , textobject, ....

    Pour autant le ne trouve pas même avec lxml la méthode pour extraire les textes présent sur le document

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 179
    Par défaut
    Hello,
    peux-tu nous montrer à quoi ressemble les parties texte de ton fichier sla parce que moi dans un exemple de fichier sla de test de la version 1.6.1 de scribus j'ai quelque chose comme :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            <PAGEOBJECT XPOS="134.173" YPOS="1200.23576377953" OwnPage="1" ItemID="85880107" PTYPE="4" WIDTH="400" HEIGHT="30" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="0" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" path="M0 0 L400 0 L400 30 L0 30 L0 0 Z" copath="M0 0 L400 0 L400 30 L0 30 L0 0 Z" gXpos="80" gYpos="120" gWidth="480" gHeight="150" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                <StoryText>
                    <DefaultStyle LINESPMode="1" ParagraphEffectOffset="0" ParagraphEffectIndent="0" DROP="1" DROPLIN="2" Bullet="0" Numeration="0" FONT="Arial Bold Italic"/>
                    <ITEXT FONT="Arial Bold Italic" FONTSIZE="12" CH="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&amp;*()-=+,./;'[]\&lt;&gt;?:&quot;{}|`~ñøîéóúö"/>
                    <trail LINESPMode="1" ParagraphEffectOffset="0" ParagraphEffectIndent="0" DROP="1" DROPLIN="2" Bullet="0" Numeration="0"/>
                </StoryText>
            </PAGEOBJECT>

    Le texte semble être dans l'attribut CH de la balise ITEXT

    Exemple d'extraction du texte avec lxml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from lxml import etree
     
    tree = etree.parse(r"D:\Temp\TextRenderingTest1.sla")
    for text in tree.xpath("//ITEXT"):
        print(text.get("CH"))
    Ami calmant, J.P

  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut
    La version sla 1.61
    Le contenu du fichier est un copier coller de texte sans grand intérêt.
    J'ai créé le document avec scribus 161.
    A partir de copier coller de texte aléatoire.

    J'espère que la structure du xlm n'est pas fait au cas par cas....
    Ce serait pas top.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            <PAGEOBJECT XPOS="171.398230088496" YPOS="83.4690265486726" OwnPage="0" ItemID="206405744" PTYPE="4" WIDTH="452.389380530974" HEIGHT="280.353982300885" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" path="M0 0 L452.389 0 L452.389 280.354 L0 280.354 L0 0 Z" copath="M0 0 L452.389 0 L452.389 280.354 L0 280.354 L0 0 Z" gXpos="171.398230088496" gYpos="83.4690265486726" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                <StoryText>
                    <DefaultStyle/>
                    <ITEXT CH="parsed = psf.ScribusFile(&quot;1.5.5&quot;, fichier)"/>
                    <para/>
                    <para/>
                    <ITEXT CH="# Utilisation de l'attribut `pages` de l'objet ScribusFile"/>
                    <para/>
                    <ITEXT CH="print(len(parsed.pages))"/>
                    <para/>
                    <para/>
                    <ITEXT CH="# Ou accès direct à l'attribut `document.pages` de l'objet model"/>
                    <para/>
                    <ITEXT CH="print(len(parsed.model.document.pages))"/>
                    <trail/>
                </StoryText>
            </PAGEOBJECT>
            <PAGEOBJECT XPOS="178.407079646018" YPOS="1002.90265486726" OwnPage="1" ItemID="206408576" PTYPE="4" WIDTH="453.663716814159" HEIGHT="191.787610619469" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" path="M0 0 L453.664 0 L453.664 191.788 L0 191.788 L0 0 Z" copath="M0 0 L453.664 0 L453.664 191.788 L0 191.788 L0 0 Z" gXpos="178.407079646018" gYpos="1002.90265486726" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                <StoryText>
                    <DefaultStyle/>
                    <ITEXT CH="Ce soir il faut beau"/>
                    <trail/>
                </StoryText>
            </PAGEOBJECT>



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
          <PAGEOBJECT XPOS="150.605504587156" YPOS="1259.05511811024" OwnPage="1" ItemID="213536848" PTYPE="4" WIDTH="296.587155963303" HEIGHT="257.568735100773" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" path="M0 0 L296.587 0 L296.587 257.569 L0 257.569 L0 0 Z" copath="M0 0 L296.587 0 L296.587 257.569 L0 257.569 L0 0 Z" gXpos="150.605504587156" gYpos="1259.05511811024" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                <StoryText>
                    <DefaultStyle/>
                    <ITEXT CH="Dedice "/>
                    <para/>
                    <ITEXT CH="   Dédié à mon père ... etc , "/>
                    <para/>
                    <ITEXT CH="... ... mais pour celui de sa famille..  "/>
                    <para/> "/>
                    <para/>
                </StoryText>
            </PAGEOBJECT>
    le xml semble être similaire mais est ce toujours le cas....

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
               <PAGEOBJECT XPOS="129.3" YPOS="2506.951" OwnPage="3" ItemID="204946592" PTYPE="12" WIDTH="539.20525" HEIGHT="739" FRTYPE="0" CLIPEDIT="0" ANNAME="Groupe 4" groupWidth="539.20525" groupHeight="739" groupClips="0" path="M0 0 L539.205 0 L539.205 739 L0 739 L0 0 Z" copath="M0 0 L539.205 0 L539.205 739 L0 739 L0 0 Z" gXpos="129.3" gYpos="2506.951" gWidth="0" gHeight="0" LAYER="0">
                <PAGEOBJECT XPOS="129.3" YPOS="2510.05" OwnPage="3" ItemID="211533168" PTYPE="4" WIDTH="172.17228" HEIGHT="718.651" FRTYPE="3" CLIPEDIT="1" PWIDTH="0" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" TransValueS="1" path="M0 0 L172.172 0 L172.172 718.651 L0 718.651 L0 0 Z" copath="M0 0 L172.172 0 L172.172 718.651 L0 718.651 L0 0 Z" gXpos="0" gYpos="3.09900000000016" gWidth="539.20525" gHeight="739" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                    <StoryText>
                        <DefaultStyle LINESPMode="1" HyphenationMode="2" HyphenChar="32" SCALEH="100" SCALEV="100"/>
                        <ITEXT CH="Table of Contents Author's Introduction ...                             ..............             "/>
                        <para/>
                    </StoryText>
                </PAGEOBJECT>
                <PAGEOBJECT XPOS="422.55" YPOS="2506.951" OwnPage="3" ItemID="207748048" PTYPE="4" WIDTH="196.3465" HEIGHT="709.75" FRTYPE="3" CLIPEDIT="1" PWIDTH="0" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" TransValueS="1" path="M0 0 L196.346 0 L196.346 709.75 L0 709.75 L0 0 Z" copath="M0 0 L196.346 0 L196.346 709.75 L0 709.75 L0 0 Z" gXpos="293.25" gYpos="0" gWidth="539.20525" gHeight="739" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                    <StoryText>
                        <DefaultStyle LINESPMode="1" HyphenationMode="2" HyphenChar="32" SCALEH="100" SCALEV="100"/>
                        <ITEXT CH="  Guildmasters .......  Society Daily Life ......................................................................................Worlds of Interest Foreign...................... Society .Affairs....Government.............................................................Law and Order ...................................................... Worlds of Interest ................................................ "/>
                        <para/>
                    </StoryText>
                </PAGEOBJECT>
                <PAGEOBJECT XPOS="656.299" YPOS="2507.201" OwnPage="3" ItemID="207754992" PTYPE="4" WIDTH="12.2062500000001" HEIGHT="709.5" FRTYPE="3" CLIPEDIT="1" PWIDTH="0" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" TransValueS="1" path="M0 0 L12.2063 0 L12.2063 709.5 L0 709.5 L0 0 Z" copath="M0 0 L12.2063 0 L12.2063 709.5 L0 709.5 L0 0 Z" gXpos="526.999" gYpos="0.25" gWidth="539.20525" gHeight="739" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                    <StoryText>
                        <DefaultStyle LINESPMode="1" HyphenationMode="2" HyphenChar="32" SCALEH="100" SCALEV="100"/>
                        <ITEXT CH="4"/>
                        <para/>
                    </StoryText>
                </PAGEOBJECT>
                <PAGEOBJECT XPOS="393.75" YPOS="3231.6185" OwnPage="3" ItemID="210000880" PTYPE="4" WIDTH="7.16624999999999" HEIGHT="14.3325" FRTYPE="3" CLIPEDIT="1" PWIDTH="0" PLINEART="1" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="1" RATIO="1" COLUMNS="1" COLGAP="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" VAlign="0" FLOP="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" TransValueS="1" path="M0 0 L7.16625 0 L7.16625 14.3325 L0 14.3325 L0 0 Z" copath="M0 0 L7.16625 0 L7.16625 14.3325 L0 14.3325 L0 0 Z" gXpos="264.45" gYpos="724.6675" gWidth="539.20525" gHeight="739" LAYER="0" NEXTITEM="-1" BACKITEM="-1">
                    <StoryText>
                        <DefaultStyle LINESPMode="1" HyphenationMode="2" HyphenChar="32" SCALEH="100" SCALEV="100"/>
                        <ITEXT CH="4 "/>
                        <para/>
                    </StoryText>
                </PAGEOBJECT>
            </PAGEOBJECT>

    on voit que parfois sur des conversion de PDF par scribus les blocs de tests sont encapsulés dans des PAGEOBJECT

    La librairie pyscribus a quel problèmes est leur exemple de code ne fonctionne pas avec les plus ressente versions de python XML est peut être aussi bien....


    la lecture par xml des éléments

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for text in tree.xpath("//ITEXT"):
        print(text.get("CH"))
    extrait le texte reste a savoir si cette solution peu etre un moyen de traduire et de reconstruire le fichier scribus

Discussions similaires

  1. Comment rendre les contenus des pages d'un site non téléchargeables et non copiables
    Par isabelle06am dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 02/07/2015, 15h19
  2. Réponses: 13
    Dernier message: 07/05/2010, 17h49
  3. Réponses: 3
    Dernier message: 11/03/2010, 15h26
  4. Réponses: 3
    Dernier message: 21/05/2008, 18h24
  5. Comment extraire les types des données dans un message SOAP
    Par demcoul dans le forum Services Web
    Réponses: 3
    Dernier message: 19/05/2008, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo