Python में OneNote फ़ाइलों से टेक्स्ट निकालने का तरीका

Python में OneNote फ़ाइलों से टेक्स्ट निकालने का तरीका

Microsoft OneNote .one फ़ाइलें बाइनरी दस्तावेज़ हैं जिन्हें साधारण टेक्स्ट के रूप में पढ़ा नहीं जा सकता या सामान्य XML टूल्स से पार्स नहीं किया जा सकता। Aspose.Note FOSS for Python एक शुद्ध‑Python पार्सर प्रदान करता है जो .one फ़ाइलों को पूर्ण दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) में लोड करता है, जिससे प्रोग्रामेटिक रूप से टेक्स्ट, फ़ॉर्मेटिंग मेटाडेटा और हाइपरलिंक्स निकालना आसान हो जाता है।

Aspose.Note FOSS को Python के लिए उपयोग करने के लाभ

  1. Microsoft Office की आवश्यकता नहीं: किसी भी प्लेटफ़ॉर्म पर .one फ़ाइलें पढ़ें, जिसमें Linux CI/CD सर्वर भी शामिल हैं
  2. पूरा टेक्स्ट और फ़ॉर्मेटिंग एक्सेस: साधारण टेक्स्ट, बोल्ड/इटैलिक/अंडरलाइन रन, फ़ॉन्ट प्रॉपर्टीज़, और हाइपरलिंक URLs
  3. नि:शुल्क और ओपन‑सोर्स: MIT लाइसेंस, कोई उपयोग शुल्क या API कुंजियाँ नहीं

चरण-दर-चरण गाइड

चरण 1: Python के लिए Aspose.Note FOSS स्थापित करें

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’ नाम का कोई मॉड्यूल नहीं मिला

कारण: पैकेज सक्रिय Python पर्यावरण में स्थापित नहीं है।

सुधार:

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

2. .one फ़ाइल लोड करने पर FileNotFoundError

Cause: फ़ाइल पथ गलत है या फ़ाइल मौजूद नहीं है।

समाधान: लोड करने से पहले एक पूर्ण पथ का उपयोग करें या फ़ाइल मौजूद है यह सत्यापित करें:

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. Windows पर प्रिंट करते समय UnicodeEncodeError

Cause: Windows टर्मिनल्स लेगेसी एन्कोडिंग का उपयोग कर सकते हैं जो यूनिकोड अक्षरों को रेंडर नहीं कर सकते।

सुधार: अपने स्क्रिप्ट की शुरुआत में 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

कारण: .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 बनाएं।


संबंधित संसाधन:

 हिन्दी