Extracción de Texto — Aspose.Note FOSS para Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText nodo. Cada RichText contiene tanto un texto sin formato .Text cadena y un .TextRuns lista de estilos individualmente aplicados TextRun segmentos. Esta página documenta todos los patrones de extracción de texto disponibles.


Extraer todo el texto plano

La forma más rápida de obtener todo el texto de un documento es GetChildNodes(RichText), que realiza un recorrido recursivo en profundidad a través de todo el DOM:

from aspose.note import Document, RichText

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

Recopilar en una lista y unir:

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
)

Extraer texto por página

Organizar el texto extraído por título de página:

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)

Inspeccionar ejecuciones de formato

RichText.TextRuns es una lista de TextRun objetos. Cada ejecución cubre un rango contiguo de caracteres con un 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}")

Referencia de la propiedad TextStyle

PropiedadTipoDescripción
IsBoldboolTexto en negrita
IsItalicboolTexto en cursiva
IsUnderlineboolTexto subrayado
IsStrikethroughboolTexto tachado
IsSuperscriptboolSuperíndice
IsSubscriptboolSubíndice
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolSi esta ejecución es un hipervínculo
HyperlinkAddress`strNone`

Extraer hipervínculos

Los hipervínculos se almacenan en el TextRun nivel. Verifique 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}")

Extraer texto en negrita y resaltado

Filtrar ejecuciones por propiedades de formato para aislar contenido específico:

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

Extraer texto de bloques de título

Los títulos de página son RichText nodos dentro del Title objeto. No se devuelven mediante un nivel superior GetChildNodes(RichText) en la página a menos que incluyas el Title subárbol. Accede a ellos directamente:

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)

Extraer texto de tablas

Las celdas de la tabla contienen RichText hijos. Utilice anidados GetChildNodes llamadas:

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)

Operaciones de texto en memoria

Reemplazar texto

RichText.Replace(old_value, new_value) sustituye texto en memoria en todas las ejecuciones:

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

Añadir un run de texto

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

Guardar texto extraído en archivo

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

Consejos

  • GetChildNodes(RichText) en un Document busca el todo árbol incluyendo todas las páginas, esquemas y elementos de esquema. Llámelo en un específico Page para limitar el alcance.
  • Siempre verifique rt.Text (o if rt.Text:) antes de imprimir, como vacío RichText los nodos existen en algunos documentos.
  • En Windows, reconfigura sys.stdout a UTF-8 para evitar UnicodeEncodeError al imprimir caracteres fuera de la página de códigos del sistema.
  • TextRun solo tiene Text y Style campos. No hay Start/End propiedades de offset; para localizar el texto de un run dentro del padre RichText.Text, busca run.Text dentro de rt.Text manualmente.

Ver también

 Español