Extracție de text — Aspose.Note FOSS pentru Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText nod. Fiecare RichText conține atât un text simplu .Text string și un .TextRuns listă de stiluri individuale TextRun segmente. Această pagină documentează fiecare model disponibil de extragere a textului.


Extrage tot textul simplu

Cea mai rapidă metodă de a obține tot textul dintr-un document este GetChildNodes(RichText), care efectuează o traversare recursivă în adâncime a întregului DOM:

from aspose.note import Document, RichText

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

Colectează într-o listă și alătură:

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
)

Extrage textul pe pagină

Organizează textul extras pe titlul paginii:

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)

Inspectează rulurile de formatare

RichText.TextRuns este o listă de TextRun obiecte. Fiecare rulare acoperă un interval continuu de caractere cu un uniform 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}")

Referință proprietate TextStyle

ProprietateTipDescriere
IsBoldboolText îngroșat
IsItalicboolText italic
IsUnderlineboolText subliniat
IsStrikethroughboolText tăiat
IsSuperscriptboolSupra-scris
IsSubscriptboolSubscris
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolDacă această secvență este un hyperlink
HyperlinkAddress`strNone`

Extrage hyperlink-uri

Hyperlink-urile sunt stocate la TextRun nivel. Verificați 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}")

Extrage text îngroșat și evidențiat

Filtrează rulurile după proprietățile de formatare pentru a izola conținutul specific:

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

Extrage textul din blocurile de titlu

Titlurile paginilor sunt RichText noduri în interiorul Title obiect. Ele nu sunt returnate de un top-level GetChildNodes(RichText) pe pagină, cu excepția dacă incluzi Title subarbore. Accesează-le direct:

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)

Extrage textul din tabele

Celulele tabelului conțin RichText copii. Folosiți imbricate GetChildNodes apeluri:

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)

Operații de text în memorie

Înlocuiește textul

RichText.Replace(old_value, new_value) înlocuiește textul în memorie în toate rulările:

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

Adaugă un run de text

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

Salvează textul extras în fișier

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

Sfaturi

  • GetChildNodes(RichText) pe un Document caută întregul arborele, incluzând toate paginile, contururile și elementele de contur. Apelați-l pe un anumit Page pentru a limita domeniul.
  • Verificați întotdeauna rt.Text (sau if rt.Text:) înainte de tipărire, ca gol RichText nodurile există în unele documente.
  • Pe Windows, reconfigure sys.stdout la UTF-8 pentru a evita UnicodeEncodeError când se tipăresc caractere în afara paginii de cod a sistemului.
  • TextRun are doar Text și Style câmpuri. Nu există Start/End proprietăți de offset; pentru a localiza textul unui run în cadrul părintelui RichText.Text, caută run.Text în rt.Text manual.

Vezi și

 Română