Ekstrakcija teksta — Aspose.Note FOSS za Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText čvor. Svaki RichText sadrži i običan tekst .Text string i .TextRuns listu pojedinačno stilizovanih TextRun segmenata. Ova stranica dokumentuje svaki dostupni obrazac za izdvajanje teksta.


Izvuci sav običan tekst

Najbrži način da se dobije sav tekst iz dokumenta je GetChildNodes(RichText), koji izvršava rekurzivno pretraživanje u dubinu kroz čitav DOM:

from aspose.note import Document, RichText

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

Sakupite u listu i spojite:

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
)

Izvuci tekst po stranici

Organizujte izvučeni tekst po naslovu stranice:

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)

Pregledajte formate

RichText.TextRuns je lista od TextRun objekata. Svaki niz pokriva uzastopni opseg znakova sa uniformnim 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}")

Referenca svojstva TextStyle

SvojstvoTipOpis
IsBoldboolPodebljan tekst
IsItalicboolKurzivni tekst
IsUnderlineboolPodvučen tekst
IsStrikethroughboolPrecrtani tekst
IsSuperscriptboolGornji indeks
IsSubscriptboolDonji indeks
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolDa li je ovaj segment hiperveza
HyperlinkAddress`strNone`

Izvuci hiperveze

Hyperlinks se čuvaju na TextRun nivou. Proverite 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}")

Izvuci podebljani i istaknuti tekst

Filtrirajte segmente po svojstvima formatiranja da izolujete određeni sadržaj:

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

Izvuci tekst iz naslova blokova

Naslovi stranica su RichText čvorovi unutar Title objekta. Oni se ne vraćaju putem top-level GetChildNodes(RichText) na stranici, osim ako ne uključite Title podstablo. Pristupite im direktno:

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)

Izvuci tekst iz tabela

Ćelije tabele sadrže RichText deca. Koristite ugnježdene GetChildNodes pozive:

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)

Operacije teksta u memoriji

Zameni tekst

RichText.Replace(old_value, new_value) zamenjuje tekst u memoriji kroz sve pokretanja:

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

Dodaj tekstualni run

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

Sačuvaj izvučeni tekst u fajl

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

Saveti

  • GetChildNodes(RichText) na Document pretražuje celokupno stablo koje uključuje sve stranice, outline‑e i elemente outline‑a. Pozovite ga na određenom Page da ograniči opseg.
  • Uvek proverite rt.Text (ili if rt.Text:) pre štampanja, pošto su prazni RichText čvorovi postoje u nekim dokumentima.
  • Na Windowsu, rekonfigurišite sys.stdout na UTF-8 da biste izbegli UnicodeEncodeError prilikom štampanja znakova izvan sistemske kodne stranice.
  • TextRun ima samo Text i Style polja. Nema Start/End svojstava pomaka; da biste locirali tekst sekvence unutar roditelja RichText.Text, pretražite run.Text unutar rt.Text ručno.

Vidi takođe

 Српски