Ekstrakcija teksta — Aspose.Note FOSS for Python

Aspose.Note FOSS za Python izlaže puni tekstualni sadržaj svake OneNote stranice putem čvora RichText. Svaki RichText sadrži i obični tekstualni niz .Text i popis .TextRuns pojedinačno stiliziranih segmenata TextRun. Ova stranica dokumentira sve dostupne obrasce za izdvajanje teksta.


Izvuci sav običan tekst

Najbrži način za dobivanje cijelog teksta iz dokumenta je GetChildNodes(RichText), koji izvršava rekurzivno dubinsko prvo pretraživanje kroz cijeli DOM:

from aspose.note import Document, RichText

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

Prikupi u listu i spoji:

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

Organizirajte izdvojeni 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)

Pregledaj sekvence formatiranja

RichText.TextRuns je popis TextRun objekata. Svaki segment pokriva neprekidni raspon znakova s jedinstvenim 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
IsBoldboolPodebljani tekst
IsItalicboolKurzivni tekst
IsUnderlineboolPodvučeni tekst
IsStrikethroughboolPrecrtani tekst
IsSuperscriptboolSuperskript
IsSubscriptboolSubskript
FontNamestr | NoneNaziv obitelji fonta
FontSizefloat | NoneVeličina fonta u točkama
FontColorint | NoneBoja fonta kao ARGB cijeli broj
Highlightint | NoneBoja pozadinskog isticanja kao ARGB cijeli broj
Languageint | NoneIdentifikator jezika (LCID)
IsHyperlinkboolJe li ovaj segment hiperveza
HyperlinkAddressstr | NoneURL kada je IsHyperlink True

Izvuci hiperveze

Hiperveze su pohranjene na razini TextRun. Provjerite 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 pokretanja prema svojstvima formatiranja kako biste izolirali 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 naslovnih blokova

Naslovi stranica su RichText čvorovi unutar objekta Title. Oni se ne vraćaju putem vršnog GetChildNodes(RichText) na stranici, osim ako ne uključite podstablo Title. Pristupite im izravno:

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)

Izdvoji tekst iz tablica

Ćelije tablice sadrže RichText djecu. Koristite ugnijež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

Zamijeni tekst

RichText.Replace(old_value, new_value) zamjenjuje 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 segment

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

Spremi izdvojeni tekst u datoteku

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

Savjeti

  • GetChildNodes(RichText) na Document pretražuje cijelo stablo uključujući sve stranice, strukture i elemente strukture. Pozovite ga na određenom Page kako biste ograničili opseg.
  • Uvijek provjerite rt.Text (ili if rt.Text:) prije ispisa, jer u nekim dokumentima postoje prazni RichText čvorovi.
  • Na Windowsu, ponovno konfigurirajte sys.stdout na UTF-8 kako biste izbjegli UnicodeEncodeError pri ispisu znakova izvan sustavne kodne stranice.
  • TextRun ima samo polja Text i Style. Ne postoje svojstva pomaka Start/End; kako biste locirali tekst pokreta unutar nadređenog RichText.Text, ručno potražite run.Text unutar rt.Text.

Vidi također

 Hrvatski