Πώς να εξάγετε κείμενο από αρχεία OneNote σε Python

Πώς να εξάγετε κείμενο από αρχεία OneNote σε Python

Τα αρχεία Microsoft OneNote .one είναι δυαδικά έγγραφα που δεν μπορούν να διαβαστούν ως απλό κείμενο ή να αναλυθούν με γενικά εργαλεία XML. Το Aspose.Note FOSS for Python παρέχει έναν pure-Python parser που φορτώνει αρχεία .one σε ένα πλήρες μοντέλο αντικειμένου εγγράφου (DOM), καθιστώντας εύκολο την εξαγωγή κειμένου, μεταδεδομένων μορφοποίησης και υπερσυνδέσμων προγραμματιστικά.

Οφέλη από τη χρήση του Aspose.Note FOSS για Python

  1. Δεν απαιτείται Microsoft Office: διαβάστε αρχεία .one σε οποιαδήποτε πλατφόρμα, συμπεριλαμβανομένων των διακομιστών Linux CI/CD
  2. Πλήρης πρόσβαση σε κείμενο και μορφοποίηση: απλό κείμενο, τμήματα με έντονη/πλάγια/υπογράμμιση, ιδιότητες γραμματοσειράς και URL υπερσυνδέσμων
  3. Δωρεάν και ανοιχτού κώδικα: άδεια MIT, χωρίς χρεώσεις χρήσης ή κλειδιά API

Οδηγός βήμα-βήμα

Βήμα 1: Εγκατάσταση Aspose.Note FOSS για Python

Εγκαταστήστε τη βιβλιοθήκη από το PyPI. Το βασικό πακέτο δεν έχει υποχρεωτικές εξαρτήσεις:

pip install aspose-note

Επαληθεύστε την εγκατάσταση:

from aspose.note import Document
print("Installation OK")

Βήμα 2: Φορτώστε το αρχείο .one

Δημιουργήστε ένα αντικείμενο Document περνώντας τη διαδρομή του αρχείου:

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages:   {len(list(doc))}")

Για τη φόρτωση από δυαδική ροή (π.χ. από αποθήκευση στο σύννεφο ή από απάντηση HTTP):

from aspose.note import Document

with open("MyNotes.one", "rb") as f:
    doc = Document(f)

Βήμα 3: Εξαγωγή Όλου του Απλού Κειμένου

Χρησιμοποιήστε GetChildNodes(RichText) για τη συλλογή κάθε RichText κόμβου στο δέντρο του εγγράφου. Αυτό εκτελεί μια αναδρομική αναζήτηση βάθους‑πρώτα σε όλες τις σελίδες, τα περιγράμματα και τα στοιχεία περιγράμματος:

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)

Για να αποθηκεύσετε όλο το κείμενο σε ένα αρχείο:

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

Βήμα 4: Επισκόπηση μορφοποιημένων τμημάτων

Κάθε RichText κόμβος περιέχει μια TextRuns λίστα από TextRun τμήματα. Κάθε run μεταφέρει ένα ανεξάρτητο 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
        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}")

Βήμα 5: Εξαγωγή υπερσυνδέσμων

Οι υπερσυνδέσεις αποθηκεύονται σε μεμονωμένους κόμβους TextRun. Ελέγξτε Style.IsHyperlink και διαβάστε 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}")

Βήμα 6: Εξαγωγή κειμένου ανά σελίδα

Για την εξαγωγή κειμένου οργανωμένου κατά τίτλο σελίδας:

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)

Κοινά προβλήματα και διορθώσεις

1. ImportError: Δεν υπάρχει μονάδα με όνομα ‘aspose’

Αιτία: Το πακέτο δεν είναι εγκατεστημένο στο ενεργό περιβάλλον Python.

Διόρθωση:

pip install aspose-note
##Confirm active environment:
pip show aspose-note

2. FileNotFoundError κατά τη φόρτωση του αρχείου .one

Αιτία: Η διαδρομή του αρχείου είναι λανθασμένη ή το αρχείο δεν υπάρχει.

Διόρθωση: Χρησιμοποιήστε απόλυτη διαδρομή ή επαληθεύστε ότι το αρχείο υπάρχει πριν τη φόρτωση:

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 στα Windows κατά την εκτύπωση

Αιτία: Τα τερματικά των Windows ενδέχεται να χρησιμοποιούν μια παλαιά κωδικοποίηση που δεν μπορεί να αποδώσει χαρακτήρες Unicode.

Διόρθωση: Επαναρυθμίστε το stdout στην αρχή του script σας:

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

4. Αποτελέσματα κενής κειμένου

Αιτία: Το αρχείο .one μπορεί να είναι κενό, να περιέχει μόνο εικόνες ή πίνακες (χωρίς κόμβους RichText), ή να είναι αρχείο σημειωματάριου (.onetoc2) αντί για αρχείο ενότητας (.one).

Διόρθωση: Ελέγξτε τον αριθμό σελίδων και επιθεωρήστε τους τύπους κόμβων:

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

Αιτία: Το αρχείο .one είναι κρυπτογραφημένο. Τα κρυπτογραφημένα έγγραφα δεν υποστηρίζονται.

Διόρθωση: Aspose.Note FOSS for Python δεν υποστηρίζει κρυπτογραφημένα .one αρχεία. Το πλήρες εμπορικό προϊόν Aspose.Note υποστηρίζει αποκρυπτογράφηση.


Συχνές Ερωτήσεις

Μπορώ να εξάγω κείμενο από όλες τις σελίδες ταυτόχρονα;

Ναι. doc.GetChildNodes(RichText) αναζητά ολόκληρο το δέντρο του εγγράφου αναδρομικά, συμπεριλαμβανομένων όλων των σελίδων, των περιγραμμάτων και των στοιχείων περιγράμματος.

Η βιβλιοθήκη υποστηρίζει αρχεία σημειωματάριου .onetoc2;

Όχι. Η βιβλιοθήκη διαχειρίζεται μόνο αρχεία ενότητας .one. Τα αρχεία πίνακα περιεχομένων του σημειωματάριου (.onetoc2) είναι διαφορετική μορφή και δεν υποστηρίζονται.

Μπορώ να εξάγω κείμενο από πίνακες;

Ναι. TableCell κόμβοι περιέχουν RichText παιδιά που μπορούν να διαβαστούν με τον ίδιο τρόπο:

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()

Ποιες εκδόσεις της Python υποστηρίζονται;

Python 3.10, 3.11 και 3.12.

Η βιβλιοθήκη είναι thread‑safe;

Κάθε Document αντίγραφο πρέπει να χρησιμοποιείται από ένα μόνο νήμα. Για παράλληλη εξαγωγή, δημιουργήστε ένα ξεχωριστό Document ανά νήμα.


Σχετικοί Πόροι:

 Ελληνικά