Extraction de texte — Aspose.Note FOSS pour Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText nœud. Chaque RichText contient à la fois un texte brut .Text chaîne et un .TextRuns liste d’éléments stylisés individuellement TextRun segments. Cette page documente chaque modèle d’extraction de texte disponible.


Extraire tout le texte brut

La façon la plus rapide d’obtenir tout le texte d’un document est GetChildNodes(RichText), qui effectue un parcours récursif en profondeur sur l’ensemble du DOM :

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    if rt.Text:
        print(rt.Text)

Collecter dans une liste et concaténer :

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
all_text = "\n".join(
    rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text
)

Extraire le texte par page

Organiser le texte extrait par titre de page :

from aspose.note import Document, Page, RichText

doc = Document("MyNotes.one")
for page in doc.GetChildNodes(Page):
    title = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else "(untitled)"
    )
    print(f"\n=== {title} ===")
    for rt in page.GetChildNodes(RichText):
        if rt.Text:
            print(rt.Text)

Inspecter les séquences de formatage

RichText.TextRuns est une liste de TextRun objets. Chaque exécution couvre une plage contiguë de caractères avec une TextStyle:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        style = run.Style
        parts = []
        if style.IsBold:          parts.append("bold")
        if style.IsItalic:        parts.append("italic")
        if style.IsUnderline:     parts.append("underline")
        if style.IsStrikethrough: parts.append("strikethrough")
        if style.IsSuperscript:   parts.append("superscript")
        if style.IsSubscript:     parts.append("subscript")
        if style.FontName:      parts.append(f"font={style.FontName!r}")
        if style.FontSize:      parts.append(f"size={style.FontSize}pt")
        label = ", ".join(parts) if parts else "plain"
        print(f"[{label}] {run.Text!r}")

Référence des propriétés TextStyle

PropriétéTypeDescription
IsBoldboolTexte en gras
IsItalicboolTexte en italique
IsUnderlineboolTexte souligné
IsStrikethroughboolTexte barré
IsSuperscriptboolExposant
IsSubscriptboolIndice
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolIndique si cette exécution est un hyperlien
HyperlinkAddress`strNone`

Extraire les hyperliens

Les hyperliens sont stockés au TextRun niveau. Vérifiez Style.IsHyperlink:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(f"  {run.Text!r:40s} -> {run.Style.HyperlinkAddress}")

Extraire le texte en gras et surligné

Filtrer les séquences par propriétés de formatage pour isoler un contenu spécifique :

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
print("=== Bold segments ===")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsBold and run.Text.strip():
            print(f"  {run.Text.strip()!r}")

print("\n=== Highlighted segments ===")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.Highlight is not None and run.Text.strip():
            color = f"#{run.Style.Highlight & 0xFFFFFF:06X}"
            print(f"  [{color}] {run.Text.strip()!r}")

Extraire le texte des blocs de titre

Les titres de page sont RichText des nœuds à l’intérieur du Title objet. Ils ne sont pas renvoyés par un niveau supérieur GetChildNodes(RichText) sur la page, sauf si vous incluez le Title sous-arbre. Accédez-y directement :

from aspose.note import Document, Page

doc = Document("MyNotes.one")
for page in doc.GetChildNodes(Page):
    if page.Title:
        if page.Title.TitleText:
            print("Title text:", page.Title.TitleText.Text)
        if page.Title.TitleDate:
            print("Title date:", page.Title.TitleDate.Text)
        if page.Title.TitleTime:
            print("Title time:", page.Title.TitleTime.Text)

Extraire le texte des tableaux

Les cellules du tableau contiennent RichText des enfants. Utilisez imbriqué GetChildNodes appels :

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    for row in table.GetChildNodes(TableRow):
        row_values = []
        for cell in row.GetChildNodes(TableCell):
            cell_text = " ".join(
                rt.Text for rt in cell.GetChildNodes(RichText)
            ).strip()
            row_values.append(cell_text)
        print(row_values)

Opérations de texte en mémoire

Remplacer le texte

RichText.Replace(old_value, new_value) remplace le texte en mémoire sur toutes les exécutions :

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    rt.Replace("TODO", "DONE")
##Changes are in-memory only; saving back to .one is not supported

Ajouter une séquence de texte

from aspose.note import Document, RichText, TextStyle

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    rt.Append(" [reviewed]")  # appends with default style
    break  # just the first node in this example

Enregistrer le texte extrait dans un fichier

import sys
from aspose.note import Document, RichText

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

doc = Document("MyNotes.one")
lines = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]

with open("extracted.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(lines))

print(f"Extracted {len(lines)} text blocks.")

Conseils

  • GetChildNodes(RichText) sur un Document recherche le entier arbre incluant toutes les pages, les plans et les éléments de plan. Appelez‑le sur un(e) spécifique Page pour limiter la portée.
  • Vérifiez toujours rt.Text (ou if rt.Text:) avant l’impression, comme vide RichText des nœuds existent dans certains documents.
  • Sous Windows, reconfigurez sys.stdout en UTF-8 pour éviter UnicodeEncodeError lors de l’impression de caractères hors de la page de code du système.
  • TextRun n’a que Text et Style champs. Il n’y a pas de Start/End propriétés de décalage ; pour localiser le texte d’une exécution dans le parent RichText.Text, recherchez run.Text dans rt.Text manuellement.

Voir aussi

 Français