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
| Propiedad | Tipo | Descripción |
|---|---|---|
IsBold | bool | Texto en negrita |
IsItalic | bool | Texto en cursiva |
IsUnderline | bool | Texto subrayado |
IsStrikethrough | bool | Texto tachado |
IsSuperscript | bool | Superíndice |
IsSubscript | bool | Subíndice |
FontName | `str | None` |
FontSize | `float | None` |
FontColor | `int | None` |
Highlight | `int | None` |
Language | `int | None` |
IsHyperlink | bool | Si esta ejecución es un hipervínculo |
HyperlinkAddress | `str | None` |
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 supportedAñ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 exampleGuardar 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 unDocumentbusca el todo árbol incluyendo todas las páginas, esquemas y elementos de esquema. Llámelo en un específicoPagepara limitar el alcance.- Siempre verifique
rt.Text(oif rt.Text:) antes de imprimir, como vacíoRichTextlos nodos existen en algunos documentos. - En Windows, reconfigura
sys.stdouta UTF-8 para evitarUnicodeEncodeErroral imprimir caracteres fuera de la página de códigos del sistema. TextRunsolo tieneTextyStylecampos. No hayStart/Endpropiedades de offset; para localizar el texto de un run dentro del padreRichText.Text, buscarun.Textdentro dert.Textmanualmente.