Ekstraksi Teks — Aspose.Note FOSS untuk Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText node. Setiap RichText menyimpan keduanya, teks biasa .Text string dan sebuah .TextRuns daftar segmen yang masing-masing bergaya TextRun segmen. Halaman ini mendokumentasikan setiap pola ekstraksi teks yang tersedia.


Ekstrak Semua Teks Polos

Cara tercepat untuk mendapatkan semua teks dari sebuah dokumen adalah GetChildNodes(RichText), yang melakukan penelusuran rekursif depth-first di seluruh DOM:

from aspose.note import Document, RichText

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

Kumpulkan ke dalam daftar dan gabungkan:

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
)

Ekstrak Teks Per Halaman

Atur teks yang diekstrak berdasarkan judul halaman:

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)

Periksa Run Pemformatan

RichText.TextRuns adalah daftar TextRun objek. Setiap run mencakup rentang karakter yang berurutan dengan 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}")

Referensi Properti TextStyle

PropertiTipeDeskripsi
IsBoldboolTeks tebal
IsItalicboolTeks miring
IsUnderlineboolTeks bergaris bawah
IsStrikethroughboolTeks coret
IsSuperscriptboolSuperskrip
IsSubscriptboolSubskrip
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolApakah run ini merupakan hyperlink
HyperlinkAddress`strNone`

Ekstrak Tautan Hiper

Hyperlink disimpan pada TextRun tingkat. Periksa 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}")

Ekstrak Teks Tebal dan Disorot

Filter run berdasarkan properti pemformatan untuk mengisolasi konten tertentu:

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

Ekstrak Teks dari Blok Judul

Judul halaman adalah RichText node di dalam Title objek. Mereka tidak dikembalikan oleh tingkat atas GetChildNodes(RichText) di halaman kecuali Anda menyertakan Title subtree. Akses mereka secara langsung:

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)

Ekstrak Teks dari Tabel

Sel tabel berisi RichText anak. Gunakan bersarang GetChildNodes memanggil:

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)

Operasi Teks dalam Memori

Ganti teks

RichText.Replace(old_value, new_value) mengganti teks dalam memori di semua eksekusi:

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

Tambahkan sebuah run teks

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

Simpan Teks yang Diekstrak ke File

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

Tips

  • GetChildNodes(RichText) pada sebuah Document mencari seluruh pohon yang mencakup semua halaman, outline, dan elemen outline. Panggil pada spesifik Page untuk membatasi ruang lingkup.
  • Selalu periksa rt.Text (atau if rt.Text:) sebelum mencetak, karena kosong RichText node ada di beberapa dokumen.
  • Di Windows, konfigurasikan ulang sys.stdout ke UTF-8 untuk menghindari UnicodeEncodeError saat mencetak karakter di luar halaman kode sistem.
  • TextRun hanya memiliki Text dan Style field. Tidak ada Start/End properti offset; untuk menemukan teks run dalam induk RichText.Text, cari run.Text di dalam rt.Text secara manual.

Lihat Juga

 Bahasa Indonesia