כיצד לחלץ טקסט מקבצי OneNote בפייתון
קבצי Microsoft OneNote .one הם מסמכים בינריים שלא ניתן לקרוא כטקסט פשוט או לנתח עם כלי XML כלליים. Aspose.Note FOSS for Python מספק parser טהור‑Python שמטען קבצי .one למודל אובייקט מסמך מלא (DOM), מה שהופך את החילוץ של טקסט, מטא‑נתוני עיצוב וקישורים היפר‑טקסטואליים לתוכניתיות לפשוט.
היתרונות של שימוש ב‑Aspose.Note FOSS עבור Python
- אין צורך ב-Microsoft Office: קריאת קבצי
.oneבכל פלטפורמה, כולל שרתי Linux CI/CD - גישה מלאה לטקסט ולעיצוב: טקסט פשוט, קטעים מודגשים/נטויים/מקוּשים, מאפייני גופן, וכתובות URL של קישורים
- חינמי וקוד פתוח: רישיון 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. כל ריצה נושאת 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’
Cause: החבילה אינה מותקנת בסביבת הפייתון הפעילה.
תיקון:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. 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 בתחילת הסקריפט שלך:
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
Cause: הקובץ .one מוצפן. מסמכים מוצפנים אינם נתמכים.
Fix: 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.
האם הספרייה בטוחה לשימוש מרובה תהליכים?
כל מופע Document צריך לשמש מתוך חוט יחיד. עבור חילוץ מקביל, צור Document נפרד לכל חוט.
משאבים קשורים: