Python'da OneNote Dosyalarından Metin Nasıl Çıkarılır

Python'da OneNote Dosyalarından Metin Nasıl Çıkarılır

Microsoft OneNote .one dosyaları, düz metin olarak okunamayan veya genel XML araçlarıyla ayrıştırılamayan ikili belgelerdir. Aspose.Note FOSS for Python, .one dosyalarını tam bir belge nesne modeli (DOM) içine yükleyen saf‑Python ayrıştırıcısı sağlar; bu sayede metin, biçimlendirme meta verileri ve köprüleri programlı olarak çıkarmak basittir.

Aspose.Note FOSS for Python Kullanmanın Faydaları

  1. Microsoft Office gerekmez: .one dosyalarını herhangi bir platformda, Linux CI/CD sunucuları dahil, okuyun
  2. Tam metin ve biçimlendirme erişimi: düz metin, kalın/eğik/altı çizili bölümler, yazı tipi özellikleri ve köprü URL’leri
  3. Ücretsiz ve açık kaynak: MIT lisansı, kullanım ücreti veya API anahtarı yok

Adım Adım Kılavuz

Adım 1: Aspose.Note FOSS for Python’ı kurun

Kütüphaneyi PyPI’dan yükleyin. Çekirdek paketinin zorunlu bağımlılıkları yoktur:

pip install aspose-note

Kurulumu doğrulayın:

from aspose.note import Document
print("Installation OK")

Adım 2: .one Dosyasını Yükle

Dosya yolunu geçirerek bir Document örneği oluşturun:

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages:   {len(list(doc))}")

İkili bir akıştan (ör. bulut depolamadan veya bir HTTP yanıtından) yüklemek için:

from aspose.note import Document

with open("MyNotes.one", "rb") as f:
    doc = Document(f)

Adım 3: Tüm Düz Metni Çıkar

GetChildNodes(RichText) kullanarak belge ağacındaki her RichText düğümünü toplayın. Bu, tüm sayfalarda, anahatlarda ve anahat öğelerinde yinelemeli derinlik‑öncelikli bir arama gerçekleştirir:

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)

Tüm metni bir dosyaya kaydetmek için:

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")

Adım 4: Biçimlendirilmiş Çalıştırmaları İncele

Her RichText düğüm, TextRuns bir TextRun segment listesi içerir. Her koşu, karakter başına biçimlendirme içeren bağımsız bir TextStyle taşır:

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}")

Adım 5: Bağlantıları Çıkar

Köprüler bireysel TextRun düğümlerinde depolanır. Style.IsHyperlink kontrol edin ve Style.HyperlinkAddress okuyun:

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}")

Adım 6: Sayfa Başına Metin Çıkar

Sayfa başlığına göre düzenlenmiş metni çıkarmak için:

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)

Yaygın Sorunlar ve Çözümler

1. ImportError: ‘aspose’ adlı bir modül bulunamadı

Neden: Paket, etkin Python ortamına kurulmamış.

Düzeltme:

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

2. .one dosyası yüklenirken FileNotFoundError

Sebep: Dosya yolu hatalı veya dosya mevcut değil.

Düzeltme: Mutlak bir yol kullanın veya yüklemeden önce dosyanın var olduğunu doğrulayın:

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’ta yazdırırken UnicodeEncodeError

Sebep: Windows terminalleri, Unicode karakterlerini görüntüleyemeyen eski bir kodlama kullanabilir.

Düzeltme: Betiğinizin başında stdout’u yeniden yapılandırın:

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

4. Boş metin sonuçları

Neden: .one dosyası boş olabilir, yalnızca görüntüler veya tablolar içerebilir (RichText düğümleri yok), ya da bir bölüm dosyası (.one) yerine bir defter dosyası (.onetoc2) olabilir.

Düzeltme: Sayfa sayısını kontrol edin ve düğüm türlerini inceleyin:

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

Sebep: .one dosyası şifrelenmiş. Şifrelenmiş belgeler desteklenmiyor.

Fix: Aspose.Note FOSS for Python şifreli .one dosyalarını desteklemiyor. Tam özellikli ticari Aspose.Note ürünü şifre çözmeyi destekler.


Sıkça Sorulan Sorular

Tüm sayfalardan bir kerede metin çıkarabilir miyim?

Evet. doc.GetChildNodes(RichText) tüm belge ağacını, tüm sayfalar, anahatlar ve anahat öğeleri dahil olmak üzere, özyinelemeli olarak arar.

Kütüphane .onetoc2 notebook dosyalarını destekliyor mu?

Hayır. Kütüphane yalnızca .one bölüm dosyalarını işler. Notebook içindekiler tablosu dosyaları (.onetoc2) farklı bir formattır ve desteklenmez.

Tablolardan metin çıkarabilir miyim?

Evet. TableCell düğümleri, aynı şekilde okunabilen RichText çocuklarını içerir:

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()

Hangi Python sürümleri destekleniyor?

Python 3.10, 3.11 ve 3.12.

Kütüphane iş parçacığı güvenli mi?

Her Document örneği tek bir iş parçacığından kullanılmalıdır. Paralel çıkarım için, her iş parçacığına ayrı bir Document oluşturun.


İlgili Kaynaklar:

 Türkçe