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é | Type | Description |
|---|---|---|
IsBold | bool | Texte en gras |
IsItalic | bool | Texte en italique |
IsUnderline | bool | Texte souligné |
IsStrikethrough | bool | Texte barré |
IsSuperscript | bool | Exposant |
IsSubscript | bool | Indice |
FontName | `str | None` |
FontSize | `float | None` |
FontColor | `int | None` |
Highlight | `int | None` |
Language | `int | None` |
IsHyperlink | bool | Indique si cette exécution est un hyperlien |
HyperlinkAddress | `str | None` |
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 supportedAjouter 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 exampleEnregistrer 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 unDocumentrecherche le entier arbre incluant toutes les pages, les plans et les éléments de plan. Appelez‑le sur un(e) spécifiquePagepour limiter la portée.- Vérifiez toujours
rt.Text(ouif rt.Text:) avant l’impression, comme videRichTextdes nœuds existent dans certains documents. - Sous Windows, reconfigurez
sys.stdouten UTF-8 pour éviterUnicodeEncodeErrorlors de l’impression de caractères hors de la page de code du système. TextRunn’a queTextetStylechamps. Il n’y a pas deStart/Endpropriétés de décalage ; pour localiser le texte d’une exécution dans le parentRichText.Text, recherchezrun.Textdansrt.Textmanuellement.