استخراج النص — 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
| خاصية | النوع | الوصف |
|---|---|---|
IsBold | bool | نص عريض |
IsItalic | bool | نص مائل |
IsUnderline | bool | نص تحته خط |
IsStrikethrough | bool | نص مشطوب |
IsSuperscript | bool | حرف علوي |
IsSubscript | bool | حرف سفلي |
FontName | `str | None` |
FontSize | `float | None` |
FontColor | `int | None` |
Highlight | `int | None` |
Language | `int | None` |
IsHyperlink | bool | ما إذا كان هذا المقطع رابطًا تشعبيًا |
HyperlinkAddress | `str | None` |
استخراج الروابط التشعبية
يتم تخزين الروابط التشعبية في 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يدويًا.