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 extraheren
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
| Functie | Ondersteund |
|---|---|
Lezen .one bestanden (pad of stream) | Ja |
Extraheren RichText.Text (platte tekst) | Ja |
Inspecteren TextRun.Style (vet, cursief, hyperlink, lettertype) | Ja |
| Tekst extraheren uit tabelcellen | Ja |
| Paginatitels lezen | Ja |
Terugschrijven naar .one | Nee |
| Versleutelde documenten | Nee |