Tekstextractie — Aspose.Note FOSS voor Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText node. Elke RichText bevat zowel een platte-tekst .Text string en een .TextRuns lijst van individueel gestylede TextRun segmenten. Deze pagina documenteert elk beschikbaar tekst-extractiepatroon.


Alle platte tekst extraheren

De snelste manier om alle tekst uit een document te halen is GetChildNodes(RichText), die een recursieve diepte-eerst doorloop over de volledige DOM uitvoert:

from aspose.note import Document, RichText

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

Verzamel in een lijst en voeg samen:

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
)

Tekst per pagina extraheren

Organiseer de geëxtraheerde tekst op paginatitel:

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)

Inspecteer opmaakruns

RichText.TextRuns is een lijst van TextRun objecten. Elke run beslaat een aaneengesloten bereik van tekens met een uniforme 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}")

Referentie van TextStyle‑eigenschappen

EigenschapTypeBeschrijving
IsBoldboolVetgedrukte tekst
IsItalicboolCursieve tekst
IsUnderlineboolOnderstreepte tekst
IsStrikethroughboolDoorgehaalde tekst
IsSuperscriptboolSuperscript
IsSubscriptboolSubscript
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolOf deze run een hyperlink is
HyperlinkAddress`strNone`

Hyperlinks extraheren

Hyperlinks worden opgeslagen op het TextRun niveau. Controleer 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}")

Vette en gemarkeerde tekst extraheren

Filter runs op opmaak‑eigenschappen om specifieke inhoud te isoleren:

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}")

Tekst uit titelblokken extraheren

Paginatitels zijn RichText knooppunten binnen de Title object. Ze worden niet geretourneerd door een top‑level GetChildNodes(RichText) op de pagina tenzij je de Title subboom. Toegang er direct tot:

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)

Tekst uit tabellen extraheren

Tabelcellen bevatten RichText kinderen. Gebruik geneste GetChildNodes aanroepen:

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)

In-Memory-tekstbewerkingen

Tekst vervangen

RichText.Replace(old_value, new_value) vervangt tekst in het geheugen bij alle runs:

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

Een tekst-run toevoegen

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

Geëxtraheerde tekst opslaan naar bestand

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.")

Tips

  • GetChildNodes(RichText) op een Document doorzoekt de hele tree inclusief alle pagina’s, outlines en outline‑elementen. Roep het aan op een specifieke Page om de scope te beperken.
  • Controleer altijd rt.Text (of if rt.Text:) vóór het afdrukken, omdat leeg RichText knooppunten bestaan in sommige documenten.
  • Op Windows, herconfigureer sys.stdout naar UTF-8 om te voorkomen UnicodeEncodeError bij het afdrukken van tekens buiten de systeem‑codepagina.
  • TextRun heeft alleen Text en Style velden. Er zijn geen Start/End offset‑eigenschappen; om de tekst van een run binnen de bovenliggende RichText.Text, zoek naar run.Text binnen rt.Text handmatig.

Zie ook

 Nederlands