استخراج النص — Aspose.Note FOSS لـ Python

Aspose.Note FOSS for Python exposes the full text content of every OneNote page through the RichText العقدة. كل RichText يحتوي على كل من نص عادي .Text سلسلة و .TextRuns قائمة من الأنماط المفردة TextRun القطاعات. توثّق هذه الصفحة كل نمط استخراج نص متاح.


استخراج كل النص العادي

أسرع طريقة للحصول على كل النص من مستند هي GetChildNodes(RichText), التي تقوم بعملية استعراض عميق متكرر عبر كامل شجرة DOM:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    if rt.Text:
        print(rt.Text)

اجمعها في قائمة وانضمها:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
all_text = "\n".join(
    rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text
)

استخراج النص لكل صفحة

نظم النص المستخرج حسب عنوان الصفحة:

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)

فحص مقاطع التنسيق

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
        parts = []
        if style.IsBold:          parts.append("bold")
        if style.IsItalic:        parts.append("italic")
        if style.IsUnderline:     parts.append("underline")
        if style.IsStrikethrough: parts.append("strikethrough")
        if style.IsSuperscript:   parts.append("superscript")
        if style.IsSubscript:     parts.append("subscript")
        if style.FontName:      parts.append(f"font={style.FontName!r}")
        if style.FontSize:      parts.append(f"size={style.FontSize}pt")
        label = ", ".join(parts) if parts else "plain"
        print(f"[{label}] {run.Text!r}")

مرجع خصائص TextStyle

خاصيةالنوعالوصف
IsBoldboolنص عريض
IsItalicboolنص مائل
IsUnderlineboolنص تحته خط
IsStrikethroughboolنص مشطوب
IsSuperscriptboolحرف علوي
IsSubscriptboolحرف سفلي
FontName`strNone`
FontSize`floatNone`
FontColor`intNone`
Highlight`intNone`
Language`intNone`
IsHyperlinkboolما إذا كان هذا المقطع رابطًا تشعبيًا
HyperlinkAddress`strNone`

استخراج الروابط التشعبية

يتم تخزين الروابط التشعبية في TextRun المستوى. تحقق Style.IsHyperlink:

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"  {run.Text!r:40s} -> {run.Style.HyperlinkAddress}")

استخراج النص الغامق والمُبرز

صَفِّ المقاطع حسب خصائص التنسيق لعزل محتوى معين:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
print("=== Bold segments ===")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsBold and run.Text.strip():
            print(f"  {run.Text.strip()!r}")

print("\n=== Highlighted segments ===")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.Highlight is not None and run.Text.strip():
            color = f"#{run.Style.Highlight & 0xFFFFFF:06X}"
            print(f"  [{color}] {run.Text.strip()!r}")

استخراج النص من كتل العنوان

عناوين الصفحات هي RichText العقد داخل الـ Title كائن. لا يتم إرجاعها بواسطة مستوى أعلى GetChildNodes(RichText) في الصفحة ما لم تقم بتضمين Title الشجرة الفرعية. الوصول إليها مباشرةً:

from aspose.note import Document, Page

doc = Document("MyNotes.one")
for page in doc.GetChildNodes(Page):
    if page.Title:
        if page.Title.TitleText:
            print("Title text:", page.Title.TitleText.Text)
        if page.Title.TitleDate:
            print("Title date:", page.Title.TitleDate.Text)
        if page.Title.TitleTime:
            print("Title time:", page.Title.TitleTime.Text)

استخراج النص من الجداول

خلايا الجدول تحتوي على RichText العناصر الفرعية. استخدم المتداخلة GetChildNodes الاستدعاءات:

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):
        row_values = []
        for cell in row.GetChildNodes(TableCell):
            cell_text = " ".join(
                rt.Text for rt in cell.GetChildNodes(RichText)
            ).strip()
            row_values.append(cell_text)
        print(row_values)

عمليات النص في الذاكرة

استبدال النص

RichText.Replace(old_value, new_value) يستبدل النص في الذاكرة عبر جميع التشغيلات:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    rt.Replace("TODO", "DONE")
##Changes are in-memory only; saving back to .one is not supported

إضافة قطعة نصية

from aspose.note import Document, RichText, TextStyle

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    rt.Append(" [reviewed]")  # appends with default style
    break  # just the first node in this example

حفظ النص المستخرج إلى ملف

import sys
from aspose.note import Document, RichText

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

doc = Document("MyNotes.one")
lines = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]

with open("extracted.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(lines))

print(f"Extracted {len(lines)} text blocks.")

نصائح

  • GetChildNodes(RichText) على Document يبحث في كامل شجرة تشمل جميع الصفحات، المخططات، وعناصر المخطط. استدعها على محدد Page لتحديد النطاق.
  • تحقق دائمًا rt.Text (أو if rt.Text:) قبل الطباعة، حيث أنها فارغة RichText توجد عقد في بعض المستندات.
  • على Windows، أعد تكوين sys.stdout إلى UTF-8 لتجنب UnicodeEncodeError عند طباعة أحرف خارج صفحة الترميز الخاصة بالنظام.
  • TextRun يحتوي فقط على Text و Style الحقول. لا توجد Start/End خصائص الإزاحة؛ لتحديد موقع نص التشغيل داخل العنصر الأصلي RichText.Text, ابحث عن run.Text داخل rt.Text يدويًا.

انظر أيضًا

 العربية