Wie man Text aus OneNote-Dateien in Python extrahiert

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

  1. Keine Microsoft Office erforderlich:Lesen Sie weiter: .one Dateien auf jeder Plattform, einschließlich Linux-CI/CD-Server.
  2. Volltext- und Formatierungszugriff: einfacher Text, fett/kursiv/unterstrichener Ausgang, Schriftart-Eigenschaften und Hyperlink-URLs
  3. 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-note

Die 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-note

2. 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. TableCell die Knoten enthalten RichText Kinder, 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:

 Deutsch