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

EigenschaftTypBeschreibung
IsBoldboolFetter Text
IsItalicboolKursiver Text
IsUnderlineboolUnterstrichener Text
IsStrikethroughboolDurchgestrichener Text
IsSuperscriptboolHochgestellt
IsSubscriptboolTiefgestellt
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolOb dieser Lauf ein Hyperlink ist
HyperlinkAddress`strNone`

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 supported

Einen 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 example

Extrahierten 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 einem Document durchsucht das gesamte Baum einschließlich aller Seiten, Gliederungen und Gliederungselemente. Rufen Sie es für ein bestimmtes Page auf, um den Geltungsbereich zu begrenzen.
  • Überprüfen Sie immer rt.Text (oder if rt.Text:) vor dem Drucken, als leer RichText Knoten existieren in einigen Dokumenten.
  • Unter Windows, neu konfigurieren sys.stdout auf UTF-8, um zu vermeiden UnicodeEncodeError beim Drucken von Zeichen außerhalb der Systemcodepage.
  • TextRun hat nur Text und Style Felder. Es gibt keine Start/End Offset-Eigenschaften; um den Text eines Run im übergeordneten Element zu lokalisieren RichText.Text, suche nach run.Text innerhalb rt.Text manuell.

Siehe auch

 Deutsch