Extração de texto Aspose.Note FOSS para Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText Cada nó. RichText contém ambos um texto simples .Text cordas e um .TextRuns Lista de modelos individuais TextRun Esta página documenta todos os padrões de extração de texto disponíveis.


Extrair todos os textos simples

Utilização: GetChildNodes(RichText) Para recolher todos os RichText Nodos num único recorrente profundidade-primeiro atravessamento em todo o documento DOM:

from aspose.note import Document, RichText

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

Faça uma lista e junte-se:

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
)

Extrair texto por página

Iterar páginas com: GetChildNodes(Page) E chama-me. GetChildNodes(RichText) em cada página para organizar o 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)

Inspecionar executar formatação

RichText.TextRuns é uma lista de: TextRun Cada execução cobre uma gama contínua de caracteres com um 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}")

TextStyle Property Reference (Referência de propriedade do estilo)

PropriedadeTipo de veículo:Descrição:
IsBoldboolTexto em negrito
IsItalicboolTexto em itálico
IsUnderlineboolTextos sublinhados
IsStrikethroughboolPassagem pelo texto
IsSuperscriptboolSuperscrição
IsSubscriptboolSubscrição
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolSe esta execução é um hiperlink
HyperlinkAddress`strNone`

Extrair hiperlinks

Os hiperlinks são armazenados no sítio Web da Comissão. TextRun nível dentro de cada um dos RichText Verifique o nó. Style.IsHyperlink booleano e leitura Style.HyperlinkAddress para obter a URL:

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

Extrair texto em negrito e destacado

O filtro é executado por formatação de propriedades para isolar conteúdo específico. Verifique IsBold para segmentos negritos e Highlight para um não-None valor para encontrar texto destacado:

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

Extrair texto dos blocos de título

Os títulos das páginas são: RichText Nodos dentro do sistema de Title Objeto. Eles não são devolvidos por um nível superior de dados, mas sim pelo objeto. GetChildNodes(RichText) na página, a menos que inclua o Title Acesse-os diretamente:

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)

Extrair texto de tabelas

As células da tabela contêm: RichText crianças. GetChildNodes chamadas a Table, TableRow, e TableCell para recolher o texto de cada célula em cada linha:

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ções de texto na memória

Substituição de texto

Chama-me . RichText.Replace(old_value, new_value) para substituir texto em memória em todos os TextRun segmentos sem modificar o ficheiro de origem:

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

Anexar uma execução de texto

Chama-me . RichText.Append(text) para adicionar um novo segmento de texto com o estilo padrão ao final de uma página existente. RichText Nodo na memória:

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

Salvar texto extraído para arquivo

Recolher tudo . RichText cadeias de texto do documento e escrever-los para um arquivo UTF-8 usando o padrão open() - Sim, sim. Chama:

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

Dicas de trabalho

  • GetChildNodes(RichText) em um Document Procura o inteiro árvore incluindo todas as páginas, contornos e elementos de contorno. Chame-o em um específico Page para limitar o âmbito.
  • Verifica sempre . rt.Text (ou if rt.Text:) antes da impressão, como vazio. RichText Os nós existem em alguns documentos.
  • No Windows, reconfigure sys.stdout para UTF-8 para evitar UnicodeEncodeError quando imprimir caracteres fora da página de código do sistema.
  • TextRun tem apenas: Text e a) Style A Comissão não tem qualquer dúvida. Start/End propriedades de offset; para localizar o texto de uma execução dentro do pai RichText.Text, busca por run.Text no âmbito de: rt.Text manualmente.

Ver também:

 Português