Python에서 OneNote 파일의 텍스트 추출 방법
Microsoft OneNote .one 파일은 일반 텍스트로 읽거나 일반 XML 도구로 구문 분석할 수 없는 바이너리 문서입니다. Aspose.Note FOSS for Python은 .one 파일을 전체 문서 객체 모델(DOM)로 로드하는 순수 파이썬 파서를 제공하므로 텍스트, 서식 메타데이터 및 하이퍼링크를 프로그래밍 방식으로 쉽게 추출할 수 있습니다.
Aspose.Note FOSS for Python 사용의 이점
- Microsoft Office가 필요 없습니다: Linux CI/CD 서버를 포함한 모든 플랫폼에서
.one파일을 읽을 수 있습니다 - 전체 텍스트 및 서식 접근: 일반 텍스트, 굵게/기울임/밑줄 적용 구간, 글꼴 속성 및 하이퍼링크 URL
- 무료 및 오픈소스: 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-note2. .one 파일을 로드할 때 FileNotFoundError
원인: 파일 경로가 올바르지 않거나 파일이 존재하지 않습니다.
Fix: 절대 경로를 사용하거나 로드하기 전에 파일이 존재하는지 확인하십시오:
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
원인: Windows 터미널은 유니코드 문자를 렌더링할 수 없는 레거시 인코딩을 사용할 수 있습니다.
Fix: 스크립트 시작 시 stdout을 재구성하십시오:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. 빈 텍스트 결과
Cause: .one 파일이 비어 있거나 이미지 또는 표만 포함하고 있을 수 있으며(RichText 노드가 없음), 섹션 파일(.one) 대신 노트북 파일(.onetoc2)일 수 있습니다.
Fix: 페이지 수를 확인하고 노드 유형을 검사하십시오:
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
Cause: .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를 생성하십시오.
관련 리소스: