Textextraktion — Aspose.Note FOSS für Python
Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText Knoten. Jeder RichText enthält sowohl einen Klartext .Text String und ein .TextRuns Liste von individuell gestalteten TextRun Segmenten. Diese Seite dokumentiert jedes verfügbare Text‑Extraktionsmuster.
Gesamten Klartext extrahieren
Der schnellste Weg, um den gesamten Text aus einem Dokument zu erhalten, ist GetChildNodes(RichText), die eine rekursive Tiefensuche über das gesamte DOM durchführt:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)In eine Liste sammeln und verbinden:
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
)Text pro Seite extrahieren
Extrahierten Text nach Seitentitel organisieren:
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)Formatierungs‑Runs prüfen
RichText.TextRuns ist eine Liste von TextRun Objekten. Jeder Durchlauf deckt einen zusammenhängenden Zeichenbereich mit einer einheitlichen 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}")Referenz der TextStyle‑Eigenschaften
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
IsBold | bool | Fetter Text |
IsItalic | bool | Kursiver Text |
IsUnderline | bool | Unterstrichener Text |
IsStrikethrough | bool | Durchgestrichener Text |
IsSuperscript | bool | Hochgestellt |
IsSubscript | bool | Tiefgestellt |
FontName | `str | None` |
FontSize | `float | None` |
FontColor | `int | None` |
Highlight | `int | None` |
Language | `int | None` |
IsHyperlink | bool | Ob dieser Lauf ein Hyperlink ist |
HyperlinkAddress | `str | None` |
Hyperlinks extrahieren
Hyperlinks werden auf der TextRun Ebene. Prüfen 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}")Fetten und hervorgehobenen Text extrahieren
Runs nach Formatierungseigenschaften filtern, um spezifischen Inhalt zu isolieren:
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}")Text aus Titelblöcken extrahieren
Seitentitel sind RichText Knoten innerhalb des Title Objekt. Sie werden nicht von einem Top-Level GetChildNodes(RichText) auf der Seite, es sei denn, Sie fügen das Title Unterbaum. Greifen Sie direkt darauf zu:
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)Text aus Tabellen extrahieren
Tabellenzellen enthalten RichText Kinder. Verwenden Sie verschachtelte GetChildNodes Aufrufe:
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)Textoperationen im Speicher
Text ersetzen
RichText.Replace(old_value, new_value) ersetzt Text im Speicher über alle Durchläufe hinweg:
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 supportedEinen Text-Run anhängen
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 exampleExtrahierten Text in Datei speichern
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.")Tipps
GetChildNodes(RichText)auf einemDocumentdurchsucht das gesamte Baum einschließlich aller Seiten, Gliederungen und Gliederungselemente. Rufen Sie es für ein bestimmtesPageauf, um den Geltungsbereich zu begrenzen.- Überprüfen Sie immer
rt.Text(oderif rt.Text:) vor dem Drucken, als leerRichTextKnoten existieren in einigen Dokumenten. - Unter Windows, neu konfigurieren
sys.stdoutauf UTF-8, um zu vermeidenUnicodeEncodeErrorbeim Drucken von Zeichen außerhalb der Systemcodepage. TextRunhat nurTextundStyleFelder. Es gibt keineStart/EndOffset-Eigenschaften; um den Text eines Run im übergeordneten Element zu lokalisierenRichText.Text, suche nachrun.Textinnerhalbrt.Textmanuell.