Hogyan lehet szöveget kinyerni OneNote fájlokból Pythonban
Microsoft OneNote .one fájlok bináris dokumentumok, amelyeket nem lehet egyszerű szövegként olvasni vagy általános XML eszközökkel feldolgozni. Az Aspose.Note FOSS for Python egy tisztán Python alapú elemzőt biztosít, amely betölti a .one fájlokat egy teljes dokumentumobjektum-modellbe (DOM), ezáltal egyszerűvé téve a szöveg, a formázási metaadatok és a hiperhivatkozások programozott kinyerését.
Az Aspose.Note FOSS Pythonban való használatának előnyei
- Microsoft Office nélkül: olvassa a
.onefájlokat bármilyen platformon, beleértve a Linux CI/CD szervereket - Teljes szöveg- és formázási hozzáférés: egyszerű szöveg, félkövér/dőlt/aláhúzott szakaszok, betűtulajdonságok és hiperhivatkozás URL-ek
- Ingyenes és nyílt forráskódú: MIT licenc, nincs használati díj vagy API kulcs
Lépésről‑lépésre útmutató
1. lépés: Az Aspose.Note FOSS telepítése Pythonhoz
Telepítse a könyvtárat a PyPI‑ról. Az alapcsomagnak nincsenek kötelező függőségei:
pip install aspose-noteEllenőrizze a telepítést:
from aspose.note import Document
print("Installation OK")2. lépés: Töltse be a .one fájlt
Hozzon létre egy Document példányt a fájl útvonalának átadásával:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages: {len(list(doc))}")Bináris adatfolyamból történő betöltéshez (pl. felhőalapú tárolóból vagy HTTP válaszból):
from aspose.note import Document
with open("MyNotes.one", "rb") as f:
doc = Document(f)3. lépés: Az összes egyszerű szöveg kinyerése
Használja a GetChildNodes(RichText) elemet a dokumentumfa minden RichText csomópontjának összegyűjtéséhez. Ez rekurzív mélységi keresést hajt végre az összes oldal, vázlat és vázlat elem között:
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)Az összes szöveg fájlba mentéséhez:
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. lépés: Formázott futamok ellenőrzése
Minden RichText csomópont egy TextRuns listát tartalmaz TextRun szegmensekből. Minden futás független TextStyle-t hordoz karakterenkénti formázással:
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. lépés: Hiperhivatkozások kinyerése
A hiperhivatkozások egyedi TextRun csomópontokban tárolódnak. Ellenőrizze a Style.IsHyperlink-t és olvassa el a Style.HyperlinkAddress-t:
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. lépés: Szöveg kinyerése oldalanként
A szöveg kinyeréséhez oldalcím szerint rendezve:
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)Gyakori problémák és megoldások
1. ImportError: Nincs ‘aspose’ nevű modul
Ok: A csomag nincs telepítve az aktív Python környezetben.
Javítás:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. FileNotFoundError a .one fájl betöltésekor
Ok: A fájl útvonala helytelen, vagy a fájl nem létezik.
Javítás: Használjon abszolút elérési utat, vagy ellenőrizze, hogy a fájl létezik‑e a betöltés előtt:
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 rendszeren nyomtatáskor
Ok: Windows terminálok használhatnak egy régi kódolást, amely nem képes megjeleníteni az Unicode karaktereket.
Fix: Állítsd be újra a stdout-ot a szkript elején:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. Üres szöveg eredménye
Ok: A .one fájl lehet üres, csak képeket vagy táblázatokat tartalmazhat (nincsenek RichText csomópontok), vagy lehet jegyzetfüzet fájl (.onetoc2) a szekciófájl (.one) helyett.
Fix: Ellenőrizze az oldalszámot és vizsgálja meg a csomóponttípusokat:
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
Ok: A .one fájl titkosított. A titkosított dokumentumok nem támogatottak.
Fix: Az Aspose.Note FOSS for Python nem támogatja a titkosított .one fájlokat. A teljes funkcionalitású kereskedelmi Aspose.Note termék támogatja a visszafejtést.
Gyakran Ismételt Kérdések
Kivonhatok szöveget az összes oldalról egyszerre?
Igen. doc.GetChildNodes(RichText) rekurzívan keres az egész dokumentumfában, beleértve az összes oldalt, vázlatot és a vázlat elemeit.
Támogatja a könyvtár a .onetoc2 jegyzetfüzet fájlokat?
Nem. A könyvtár csak a .one szakaszfájlokat kezeli. A jegyzetfüzet tartalomjegyzék fájlok (.onetoc2) más formátumúak, és nem támogatottak.
Kivonhatok szöveget a táblázatokból?
Igen. TableCell csomópontok RichText gyermekeket tartalmaznak, amelyeket ugyanúgy lehet beolvasni:
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()Mely Python verziók támogatottak?
Python 3.10, 3.11 és 3.12.
A könyvtár szálbiztos?
Minden Document példányt egyetlen szálról kell használni. Párhuzamos kinyeréshez hozzon létre egy külön Document példányt szálanként.
Kapcsolódó források: