Wie man Text aus OneNote-Dateien in Python extrahiert
Microsoft OneNote-Dateien mit einem .one Dateien sind binäre Dokumente, die nicht als einfacher Text gelesen oder mit generischen XML-Tools analysiert werden können. Aspose.Note FOSS für Python bietet einen reinen Python-Parser, der laden kann .one DOM-Dateien, die es einfacher machen, Text zu extrahieren, Metadaten und Hyperlinks programmatisch zu formatieren.
Vorteile der Verwendung von Aspose.Note FOSS für Python
- Keine Microsoft Office erforderlich:Lesen Sie weiter:
.oneDateien auf jeder Plattform, einschließlich Linux-CI/CD-Server. - Volltext- und Formatierungszugriff: einfacher Text, fett/kursiv/unterstrichener Ausgang, Schriftart-Eigenschaften und Hyperlink-URLs
- Freie und Open-Source-basierte Software: MIT-Lizenz, keine Gebühren oder API-Schlüssel
Schritt für Schritte
Schritt 1: Installieren Sie Aspose.Note FOSS für Python
Installieren Sie die Bibliothek von PyPI. Das Kernpaket hat keine obligatorischen Abhängigkeiten:
pip install aspose-noteDie Installation überprüfen:
from aspose.note import Document
print("Installation OK")Schritt 2: Laden der .one-Datei ein
Erstellen einer Document Instanz durch Übertragung des Pfades der Datei:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages: {len(list(doc))}")Um aus einem binären Stream (z. B. aus Cloud-Speicher oder einer HTTP-Antwort) zu laden:
from aspose.note import Document
with open("MyNotes.one", "rb") as f:
doc = Document(f)Schritt 3: Alle einfachen Texte extrahieren
Verwendung GetChildNodes(RichText) Die Kommission hat die RichText Dies führt eine rekursive, tiefgründige Suche über alle Seiten, Umrisse und Umschlagelemente durch:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
for text in texts:
print(text)Um den extrahierten Text in eine Datei zu speichern:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
with open("extracted_text.txt", "w", encoding="utf-8") as out:
out.write("\n".join(texts))
print(f"Wrote {len(texts)} text blocks to extracted_text.txt")Schritt 4: Inspirieren von formatierten Laufen
Jeder von ihnen RichText Knoten enthält eine TextRuns Liste der TextRun Die Veröffentlichung der Berichte ist in den letzten Jahren mit einer Vielzahl von TextStyle mit einer Pro-Charakter-Formatierung:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
style = run.Style
attrs = []
if style.IsBold: attrs.append("bold")
if style.IsItalic: attrs.append("italic")
if style.IsUnderline: attrs.append("underline")
if style.IsStrikethrough: attrs.append("strikethrough")
if style.FontName: attrs.append(f"font={style.FontName}")
if style.FontSize: attrs.append(f"size={style.FontSize}pt")
label = ", ".join(attrs) if attrs else "plain"
print(f"[{label}] {run.Text!r}")Schritt 5: Hyperlinks extrahieren
Hyperlinks werden auf den einzelnen TextRun - Die Nodes. Style.IsHyperlink und lesen. Style.HyperlinkAddress:
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"Link text: {run.Text!r}")
print(f"URL: {run.Style.HyperlinkAddress}")Schritt 6: Text pro Seite extrahieren
Um Text nach Titeln zu extrahieren:
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)Häufige Probleme und Lösungen
1. ImportError: No module named ‘aspose’
Ursache:Das Paket ist nicht in der aktiven Python-Umgebung installiert.
Behebung:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. FileNotFoundError when loading .one file
Ursache: Der Pfad der Datei ist falsch oder die Datenbestandsdaten nicht vorhanden.
Behebung: Verwenden Sie einen absoluten Pfad oder überprüfen Sie vor dem Laden, ob die Datei existiert:
from pathlib import Path
from aspose.note import Document
path = Path("MyNotes.one")
if not path.exists():
raise FileNotFoundError(f"File not found: {path.resolve()}")
doc = Document(str(path))3. UnicodeEncodeError on Windows when printing
Ursache: Windows-Terminals können eine ältere Kodierung verwenden, die Unicode-Zeichen nicht darstellen kann.
Behebung:Konfigurieren Sie stdout am Anfang Ihres Skripts neu:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. Empty text results
Ursache:Die .one Die Datei kann leer sein, nur Bilder oder Tabellen enthalten (keine RichText-Knoten) oder eine Notebookdatei sein (.onetoc2) statt einer Sektionsdatei (.one).
Behebung: Überprüfen Sie die Seitenzahl und prüfen sie die Knotenarten:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")
for page in doc:
print(f" Children: {sum(1 for _ in page)}")5. IncorrectPasswordException
Ursache:Die .one Die Datei ist verschlüsselt. Verschlüsselte Dokumente werden nicht unterstützt.
Behebung:FOSS für Python unterstützt keine Verschlüsselung. .one Das voll funktionsfähige kommerzielle Aspose.Note Produkt unterstützt die Entschlüsselung.
Häufig gestellte Fragen
Kann ich Text von allen Seiten auf einmal extrahieren?
- Ja, das ist gut.
doc.GetChildNodes(RichText)Sucht rekursiv den gesamten Dokumentbaum, einschließlich aller Seiten, Umrisse und Umschlagelemente.
Unterstützt die Bibliothek .onetoc2-Notebook-Dateien?
Nein, die Bibliothek kümmert sich um das. .one Die Datenbank ist in der Regel nur für die Bereiche “Dateien” und “File-Section”-Daten verfügbar..onetoc2) sind ein anderes Format und werden nicht unterstützt.
Kann ich Text aus Tabellen extrahieren?
- Ja, das ist gut.
TableCelldie Knoten enthaltenRichTextKinder, die auf dieselbe Weise gelesen werden können:
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):
for cell in row.GetChildNodes(TableCell):
cell_text = " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
print(cell_text, end="\t")
print()Welche Python-Versionen werden unterstützt?
Python 3.10, 3.11 und 3.12.
Ist die Bibliothek sicher?
Jeder von ihnen Document Die Installation sollte aus einem einzigen Thread verwendet werden. Für die parallele Extraktion erstellen Sie eine separate Document pro Faden.
Verwandte Ressourcen: