Kuinka poimia teksti OneNote‑tiedostoista Pythonilla

Kuinka poimia teksti OneNote‑tiedostoista Pythonilla

Microsoft OneNote .one -tiedostot ovat binääritiedostoja, joita ei voida lukea tavallisena tekstinä tai jäsentää yleisillä XML-työkaluilla. Aspose.Note FOSS for Python tarjoaa puhtaan Python-parsijan, joka lataa .one -tiedostot täyteen dokumenttiobjektimalliin (DOM), mikä tekee tekstin, muotoilutietojen ja hyperlinkkien ohjelmallisesta poimimisesta suoraviivaista.

Aspose.Note FOSS:n käytön edut Pythonissa

  1. Ei Microsoft Officea vaadita: lue .one -tiedostoja millä tahansa alustalla, mukaan lukien Linux CI/CD -palvelimet
  2. Täysi tekstin ja muotoilun pääsy: pelkkä teksti, lihavointi/kursivointi/alleviivausosat, fonttien ominaisuudet ja hyperlinkkien URL-osoitteet
  3. Ilmainen ja avoimen lähdekoodin: MIT-lisenssi, ei käyttömaksuja tai API-avaimia

Vaiheittainen opas

Vaihe 1: Asenna Aspose.Note FOSS for Python

Asenna kirjasto PyPI:stä. Ydinpaketilla ei ole pakollisia riippuvuuksia:

pip install aspose-note

Vahvista asennus:

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

Vaihe 2: Lataa .one‑tiedosto

Luo Document-instanssi antamalla tiedostopolku:

from aspose.note import Document

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

Ladataan binaarisesta virrasta (esim. pilvitallennuksesta tai HTTP‑vastauksesta):

from aspose.note import Document

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

Vaihe 3: Poimi kaikki tavallinen teksti

Käytä GetChildNodes(RichText) keräämään kaikki RichText-solmut asiakirjapuussa. Tämä suorittaa rekursiivisen syvyyssuuntaisen haun kaikilla sivuilla, sisällysluetteloilla ja sisällysluettelon elementeillä:

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)

Tallentaaksesi kaikki teksti tiedostoon:

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

Vaihe 4: Tarkastele muotoiltuja osuuksia

Jokainen RichText solmu sisältää TextRuns luettelon TextRun segmenteistä. Jokainen suoritus sisältää itsenäisen TextStyle merkkikohtaisella muotoilulla:

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

Vaihe 5: Hae hyperlinkit

Hyperlinkit tallennetaan yksittäisille TextRun solmuille. Tarkista Style.IsHyperlink ja lue 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}")

Vaihe 6: Poimi teksti sivukohtaisesti

Tekstin poimimiseksi järjestettynä sivun otsikon mukaan:

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)

Yleisiä ongelmia ja korjauksia

1. ImportError: Moduulia nimeltä ‘aspose’ ei löydy

Syy: Pakettia ei ole asennettu aktiiviseen Python-ympäristöön.

Korjaus:

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

2. FileNotFoundError .one‑tiedostoa ladattaessa

Syy: Tiedostopolku on virheellinen tai tiedostoa ei ole olemassa.

Korjaus: Käytä absoluuttista polkua tai tarkista, että tiedosto on olemassa ennen lataamista:

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. UnicodeEncodeError Windowsissa tulostettaessa

Syy: Windows-terminaalit saattavat käyttää vanhaa koodausta, joka ei pysty renderöimään Unicode-merkkejä.

Korjaus: Määritä stdout uudelleen skriptin alussa:

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

4. Tyhjän tekstin tulokset

Syy: Tiedosto .one voi olla tyhjä, sisältää vain kuvia tai taulukoita (ei RichText-solmuja) tai olla muistiinpanotiedosto (.onetoc2) eikä osiotiedosto (.one).

Fix: Tarkista sivumäärä ja tarkastele solmutyyppejä:

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

Syy: Tiedosto .one on salattu. Salattuja asiakirjoja ei tueta.

Fix: Aspose.Note FOSS for Python ei tue salattuja .one-tiedostoja. Täydellinen kaupallinen Aspose.Note -tuote tukee salauksen purkua.


Usein kysytyt kysymykset

Voinko poimia tekstin kaikilta sivuilta kerralla?

Kyllä. doc.GetChildNodes(RichText) hakee koko asiakirjapuun rekursiivisesti, mukaan lukien kaikki sivut, sisällysluettelot ja sisällysluettelon elementit.

Tukiko kirjasto .onetoc2-muistion tiedostoja?

Ei. Kirjasto käsittelee vain .one-osatiedostoja. Muistion sisällysluettelotiedostot (.onetoc2) ovat eri formaattia, eikä niitä tueta.

Voinko poimia tekstiä taulukoista?

Kyllä. TableCell solmut sisältävät RichText lapsia, jotka voidaan lukea samalla tavalla:

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

Mitä Python‑versioita tuetaan?

Python 3.10, 3.11 ja 3.12.

Onko kirjasto säikeiturvallinen?

Jokainen Document-instanssi tulisi käyttää yhdestä säikeestä. Rinnakkaista purkua varten luo erillinen Document jokaiselle säikeelle.


Liittyvät resurssit:

 Suomi