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ı
- Microsoft Office gerekmez:
.onedosyalarını herhangi bir platformda, Linux CI/CD sunucuları dahil, okuyun - 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
- Ü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-noteKurulumu 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-note2. .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: