Tekst extraheren uit OneNote-bestanden met Python

Als je tekst uit Microsoft OneNote moet lezen .one bestanden in een Python script, zonder Microsoft Office te installeren of Windows uit te voeren, Aspose.Note FOSS for Python is de oplossing. Het is een 100% gratis, open-source bibliotheek die het OneNote-binaire formaat direct parseert en een schone Python API blootlegt.

Installeren

pip install aspose-note

Geen API‑sleutel. Geen licentiebestand. Geen Microsoft Office.


De eenvoudigste aanpak: GetChildNodes(RichText)

OneNote-tekst wordt opgeslagen in RichText knooppunten verspreid over pagina’s, outlines en outline‑elementen. GetChildNodes(RichText) voert een recursieve zoekopdracht uit op de volledige documentboom en retourneert elk tekstknooppunt als een platte lijst:

from aspose.note import Document, RichText

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

Dit is de snelste manier om alle tekstinhoud uit een .one bestand.


Tekst opslaan in een bestand

from aspose.note import Document, RichText

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"Saved {len(lines)} text blocks to extracted.txt")

Tekst per pagina extraheren

Wanneer je moet weten van welke pagina elk tekstblok afkomstig is:

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)"
    )
    page_texts = [rt.Text for rt in page.GetChildNodes(RichText) if rt.Text]
    print(f"\n=== {title} ===")
    for text in page_texts:
        print(text)

Hyperlinks worden opgeslagen op individuele TextRun objecten binnen RichText knooppunten. Controleer run.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}  ->  {run.Style.HyperlinkAddress}")

Opmaak detecteren: vet, cursief, onderstrepen

Elke TextRun draagt per‑teken opmaak via zijn TextStyle:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        s = run.Style
        if any([s.IsBold, s.IsItalic, s.IsUnderline]):
            flags = ", ".join(f for f, v in [
                ("bold", s.IsBold), ("italic", s.IsItalic), ("underline", s.IsUnderline)
            ] if v)
            print(f"[{flags}] {run.Text.strip()!r}")

Lezen van een stream

Werkt met cloudopslag, HTTP‑responslichamen of buffers in het geheugen:

import io, urllib.request
from aspose.note import Document, RichText

##Example: load from bytes already in memory
one_bytes = open("MyNotes.one", "rb").read()
doc = Document(io.BytesIO(one_bytes))
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print(f"Extracted {len(texts)} text block(s)")

Windows-coderingcorrectie

Op Windows-terminals, sys.stdout kan een verouderde codering gebruiken die crasht bij Unicode‑tekens. Voeg dit toe aan het begin van je script:

import sys
if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

Wat de bibliotheek ondersteunt

FunctieOndersteund
Lezen .one bestanden (pad of stream)Ja
Extraheren RichText.Text (platte tekst)Ja
Inspecteren TextRun.Style (vet, cursief, hyperlink, lettertype)Ja
Tekst extraheren uit tabelcellenJa
Paginatitels lezenJa
Terugschrijven naar .oneNee
Versleutelde documentenNee

Volgende stappen