
anydoc로 변환한 제안서를 AI에게 전달하기 전의 Python 검사
요약
Office 문서를 Markdown으로 변환하는 anydoc 라이브러리 사용 시, 데이터 누락을 방지하기 위한 Python 기반 검증 프로세스를 소개합니다. 변환된 Markdown 파일에서 필수 단어, 헤드라인 수, 표의 개수 등을 체크하여 AI 요약 전 데이터의 무결성을 확보하는 방법을 다룹니다.
핵심 포인트
- anydoc를 활용한 Office 자료의 Markdown 변환 효율성
- AI 요약 전 데이터 누락을 방지하기 위한 Python 검증 단계의 필요성
- 필수 단어 및 구조(Heading, Table) 기반의 JSON 검사 방식
- 변환 오류와 내용 누락을 구분하기 위한 단계적 필터링 전략
사실은 반대입니다. Office 자료를 Markdown으로 변환하기 쉬워질수록, 요약 전의 확인은 생략할 수 없습니다.
8월 5일에 Firecrawl이 공개한 anydoc은 Office 자료를 Markdown으로 변환할 수 있는 Rust제 라이브러리입니다. 제안서, 구버전 견적서, 고객으로부터 받은 Excel을 동일한 입구에서 다룰 수 있다는 점은 영업 기획 부서에서 큰 도움이 됩니다.
하지만 변환 결과가 Markdown이라는 것과, 요약에 필요한 정보가 남아 있다는 것은 별개의 문제입니다. 표의 금액, 납기, 검수 조건 중 하나라도 누락되어도, 생성된 요약은 묘하게 자연스러운 문장으로 돌아옵니다. 자연스럽기 때문에 놓치게 됩니다. 이 점이 까다로웠습니다.
저라면 변환 직후에 "이 자료에서 절대로 놓쳐서는 안 될 단어"를 기계적으로 확인한 다음, 요약이나 CRM 등록으로 넘깁니다. Markdown을 신뢰하기 전에, 이번 검사를 한 단계 거칩니다.
anydoc의 README에는 변환할 수 없었던 이미지뿐인 PDF나 암호화된 파일을 에러로 처리한다는 설명이 있습니다. 우선 이 에러를 기록하고, 변환된 파일만 다음 단계로 진행합니다.
그다음에 보는 것이 내용입니다. 예를 들어 제안서라면 고객명, 견적 금액, 납기. 요금표라면 표 그 자체. 전부를 사람이 다시 읽는 것이 아니라, 자료마다 최소한의 조건을 JSON에 둡니다.
글자 수만으로는 부족합니다. 권말의 면책 사항으로 글자 수를 채웠더라도, 본문의 금액이 사라져 있다면 곤란하기 때문입니다. 헤드라인(Heading) 수와 Markdown 표의 개수도 확인합니다. 요약 전의 필터링(Cut-off)으로서는 충분히 효과적입니다.
checks.json은 다음과 같은 형태입니다. 필수 단어는 요약 결과에 포함되길 원하는 단어가 아니라, 원본 자료에서 사라지면 곤란한 단어로 설정합니다.
[
{
"file": "proposal.md",
...
금액을 "1280000엔"이라고 단정 짓는 것은 정식 버전의 견적서를 가져올 때뿐입니다. 매달 업데이트되는 요금표라면, 견적 금액과 같은 헤드라인을 필수 단어로 설정하고, 금액의 타당성은 별도의 처리로 확인합니다. 이 부분을 하나의 만능 규칙으로 만들지 않는 것이 나중에 곤란을 겪지 않는 방법입니다.
표준 라이브러리만으로 동작합니다. 변환된 Markdown과 JSON을 배치하고, 다음 코드를 check_markdown.py로 저장합니다.
import argparse
import json
import re
...
실행은 이것뿐입니다.
python3 check_markdown.py checks.json
제 수중의 샘플에서는 다음과 같이 나왔습니다.
OK proposal.md
checks.json에 존재하지 않는 검수 조건을 한 단어 추가하면, 종료 코드는 1이 되고 출력은 다음과 같이 바뀝니다.
NG proposal.md
- 필수 단어가 없습니다: 검수 조건
이 시점에서는 요약 API를 호출하지 않습니다. 원래의 docx나 PDF를 열어서, 변환에 실패한 것인지 아니면 애초에 자료에 적혀 있지 않은 것인지 확인합니다. 어제 필수 단어를 하나 추가했을 뿐인데 이 NG가 나왔을 때, 변환 결과를 눈으로 대충 훑는 운용보다 훨씬 안심이 되었습니다. 이 부분이 은근히 효과적입니다.
이 코드는 표의 테두리(Border)를 셀 때뿐입니다. 셀 병합으로 열이 어긋났다거나, 수식의 표시값만 들어갔다거나 하는 내용까지는 판정하지 않습니다.
금액이나 날짜를 자동으로 사용하려면, 검사를 통과한 Markdown을 CSV나 JSON으로 추출하고, 원본 파일의 해당 셀과 대조하는 공정을 분리합니다. 전부를 하나의 스크립트에 몰아넣으면 규칙이 변경될 때마다 망가집니다. 제안서 접수에서는 필수 단어와 헤드라인, 요금표에서는 열 이름과 행 수와 같은 방식으로 작게 늘려가는 것이 현장에서 지속 가능합니다.
자료 변환이 빨라진 만큼 AI에게 전달할 파일은 늘어납니다. 그래서 필요한 것은 변환 도구를 늘리는 것보다, 멈추는 지점을 결정하는 것입니다.
이 검사를 통과한 Markdown만을 요약이나 CRM 등록으로 넘기면, 결함이 있는 자료를 그럴듯한 문장으로 만들어버리는 사고를 줄일 수 있습니다. 우선 잃어버리면 곤란한 단어를 세 개만 적어보세요. 영업 기획 자동화에서는 그 세 개를 먼저 지키는 것이, 프롬프트(Prompt)를 길게 만드는 것보다 성과로 이어집니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기