n8n은 다양한 서비스와 어플리케이션을 연결하여 자동화된 워크플로우를 구축할 수 있는 강력한 툴입니다. n8n을 활용하여 문서 및 이미지 파일에서 텍스트를 추출하고, 이를 저장하거나 다른 시스템으로 전송하는 방법입니다. 특히 PDF, 이미지(JPG, PNG, TIFF 등), 문서 파일(DOC, DOCX, PPTX 등)에서 텍스트를 추출하는 방법과 한글 문서 파일인 .hwp
파일 처리 방법, 그리고 Tesseract-OCR을 활용한 이미지 텍스트 추출 방법입니다.
- n8n 설치 및 기본 설정
- 워크플로우 설계
- 워크플로우 실행 및 테스트
- 결과 확인
- 예제 워크플로우 구성
- 한글 문서(.hwp) 파일 처리 방법
- Tesseract-OCR 설치 및 n8n에서 활용
- PDF 및 워드 문서에서 이미지 추출 및 저장
- 결론
1. n8n 설치 및 기본 설정
n8n을 사용하기 위해서는 먼저 n8n을 설치하고 필요한 노드를 사용할 수 있도록 설정해야 합니다. n8n은 Docker, npm, 또는 데스크톱 버전으로 설치할 수 있으며, 공식 문서에 따라 설치를 진행합니다.
- n8n 공식 설치 가이드: https://docs.n8n.io/getting-started/installation/
2. 워크플로우 설계
워크플로우는 다음과 같은 단계로 구성됩니다.
2.1 입력 소스 설정
HTTP Request Node를 사용하여 웹에서 파일을 가져옵니다.
- Method:
GET
- URL: 대상 파일의 웹 주소를 입력합니다.
- 이 노드는 지정된 URL에서 파일을 다운로드하여 다음 노드로 전달합니다.
2.2 파일 형식 확인
IF Node를 사용하여 파일의 확장자를 확인하고, 파일 형식에 따라 다른 처리 경로로 분기합니다.
- 조건 설정:
file.extension
필드를 검사합니다. - 예를 들어, 파일 확장자가
.pdf
인 경우 PDF 처리 노드로 연결합니다.
2.3 텍스트 추출
파일 형식에 따라 적절한 텍스트 추출 방법을 선택합니다.
PDF 파일 처리
- PDF Extract Node를 사용하여 PDF에서 텍스트를 추출합니다.
- 입력 파일: 이전 노드에서 다운로드한 PDF 파일
- 출력: 추출된 텍스트
이미지 파일 처리 (JPG, PNG, TIFF 등)
- OCR (Tesseract) Node를 사용하여 이미지에서 텍스트를 추출합니다.
- 입력 파일: 이미지 파일
- 설정: 언어 및 페이지 세분화 모드를 설정할 수 있습니다.
문서 파일 처리 (DOC, DOCX, PPTX 등)
- Document Parser Node를 사용하여 다양한 문서 형식에서 텍스트를 추출합니다.
- 입력 파일: 문서 파일
- 출력: 추출된 텍스트
기타 파일 처리 (TXT, CSV 등)
- 이러한 파일은 텍스트 파일이므로 별도의 추출 과정 없이 내용을 직접 읽을 수 있습니다.
2.4 텍스트 처리 및 저장
Function Node
- 텍스트 가공: 추출된 텍스트를 정리하거나 포맷을 조정합니다.
- 예: 특정 단어나 문구를 치환, 불필요한 공백 제거 등
File Node 또는 HTTP Request Node
- File Node: 로컬 파일 시스템에 텍스트를 저장합니다.
- HTTP Request Node: 추출된 텍스트를 다른 서버나 API로 전송합니다.
3. 워크플로우 실행 및 테스트
- 워크플로우를 실행하여 각 단계가 정상적으로 동작하는지 확인합니다.
- 다양한 파일 형식으로 테스트를 진행하여 문제점을 발견하고 수정합니다.
- 오류 발생 시 Error Workflow를 추가하여 로그를 기록하거나 이메일 알림을 설정할 수 있습니다.
4. 결과 확인
- 추출된 텍스트가 지정된 위치에 저장되었는지 또는 원하는 시스템으로 전송되었는지 확인합니다.
- 추가적인 데이터 처리나 저장 작업을 수행할 수 있습니다.
5. 예제 워크플로우 구성
- HTTP Request Node로 파일 다운로드
- IF Node로 파일 확장자 검사 및 분기
- 파일 형식에 따라 적절한 노드 사용:
- PDF Extract Node (PDF 파일)
- OCR Node (이미지 파일)
- Document Parser Node (문서 파일)
- Function Node로 텍스트 가공
- File Node 또는 HTTP Request Node로 결과 저장 또는 전송
6. 한글 문서(.hwp) 파일 처리 방법
n8n의 기본 노드 중에는 .hwp
파일을 직접 지원하는 노드는 없습니다. 하지만 다음과 같은 대안을 통해 .hwp
파일에서 텍스트를 추출할 수 있습니다.
6.1 hwp 파일 변환 API 사용
- 외부 API 활용:
.hwp
파일을 PDF 또는 TXT로 변환해주는 외부 API를 사용합니다. - HTTP Request Node를 사용합니다.
.hwp
파일을 API에 업로드- 변환된 파일을 다운로드하여 처리
- 예: Hancom Docs Conversion API
6.2 Python 스크립트 사용
- Execute Command Node를 사용하여 서버에서 Python 스크립트를 실행합니다.
- pyhwp 라이브러리를 사용하여
.hwp
파일에서 텍스트를 추출합니다.import hwp5 def extract_hwp_text(hwp_file_path): with open(hwp_file_path, 'rb') as f: hwp = hwp5.HWP5File(f) text = hwp.extract_text() return text # 실행 부분 hwp_file_path = '/path/to/your/file.hwp' text = extract_hwp_text(hwp_file_path) print(text)
- 추출된 텍스트를 다음 노드로 전달하여 저장하거나 추가 처리합니다.
6.3 Document Conversion Tool 사용
- LibreOffice나 한컴오피스 등의 도구를 이용하여
.hwp
파일을 다른 형식으로 변환합니다. - 변환 작업을 자동화할 수 있는 스크립트를 작성하고, Execute Command Node를 통해 실행합니다.
예시: LibreOffice를 통한 변환
libreoffice --headless --convert-to pdf /path/to/file.hwp --outdir /output/path
6.4 Custom Docker Container 사용
- n8n에서 사용하는 Docker 컨테이너에 필요한 Python 패키지나 변환 도구를 설치합니다.
- 커스텀 이미지를 생성하여 n8n을 실행하고, 필요한 환경을 구성합니다.
7. Tesseract-OCR 설치 및 n8n에서 활용
Tesseract-OCR은 이미지 파일에서 텍스트를 추출하는 강력한 오픈소스 OCR 엔진입니다.
7.1 Tesseract 설치 방법
Linux (Ubuntu) 설치
sudo apt update
sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
Windows 설치
- Tesseract GitHub 페이지에서 최신 버전을 다운로드합니다.
- 설치 후, 환경 변수
PATH
에 Tesseract 설치 경로를 추가합니다.
MacOS 설치
brew install tesseract
7.2 Tesseract 기본 사용법
tesseract input_image.png output_text -l eng --oem 1 --psm 3
- input_image.png: OCR을 적용할 이미지 파일
- output_text: 출력 파일 이름 (예: output_text.txt)
- -l eng: 언어 설정 (영어)
- --oem 1: OCR 엔진 모드 설정 (LSTM 기반 엔진)
- --psm 3: 페이지 세분화 모드 설정 (자동)
7.3 n8n에서 Tesseract 사용하기
Execute Command Node를 사용하여 Tesseract를 실행합니다.
- HTTP Request Node로 이미지 파일 다운로드
- Execute Command Node 설정
- Command 필드에 다음 명령 입력
tesseract /path/to/input_image.png /path/to/output_text -l eng --oem 1 --psm 3
- Command 필드에 다음 명령 입력
- Read Binary File Node로 출력된 텍스트 파일 읽기
- Set Node로 텍스트를 필요한 형식으로 처리 및 저장
7.4 Tesseract의 추가 옵션
- 언어 설정: 한국어를 사용하려면
-l kor
옵션을 사용합니다. 한국어 언어 데이터가 설치되어 있어야 합니다. - 페이지 세분화 모드
--psm
옵션--psm 1
: 자동 페이지 세분화--psm 4
: 단일 열 텍스트- 문서의 구조에 따라 적절한 모드를 선택합니다.
8. PDF 및 워드 문서에서 이미지 추출 및 저장
PDF나 워드 문서에서 텍스트 외에 이미지를 추출하고 이미지 파일로 저장하는 방법입니다.
8.1 필요한 도구 설치
Python 및 패키지 설치
pip install PyMuPDF
pip install python-docx
- PyMuPDF: PDF에서 이미지 및 텍스트를 추출하기 위한 라이브러리
- python-docx: 워드 문서에서 이미지 및 텍스트를 추출하기 위한 라이브러리
8.2 n8n에서 Python 스크립트 사용
PDF에서 이미지 추출
import fitz # PyMuPDF
def extract_images_from_pdf(pdf_path, output_folder):
doc = fitz.open(pdf_path)
image_count = 0
for page_index in range(len(doc)):
page = doc[page_index]
images = page.get_images(full=True)
for img_index, img in enumerate(images):
xref = img[0]
base_image = doc.extract_image(xref)
image_bytes = base_image["image"]
image_ext = base_image["ext"]
image_count += 1
image_filename = f"{output_folder}/image{image_count}.{image_ext}"
with open(image_filename, "wb") as image_file:
image_file.write(image_bytes)
return image_count
# 실행 부분
pdf_path = "/path/to/your/file.pdf"
output_folder = "/path/to/output/images"
image_count = extract_images_from_pdf(pdf_path, output_folder)
print(f"Extracted {image_count} images.")
워드 문서에서 이미지 추출
from docx import Document
def extract_images_from_docx(docx_path, output_folder):
doc = Document(docx_path)
image_count = 0
for rel in doc.part.rels.values():
if "image" in rel.target_ref:
image_count += 1
image_data = rel.target_part.blob
ext = rel.target_ref.split(".")[-1]
image_filename = f"{output_folder}/image{image_count}.{ext}"
with open(image_filename, "wb") as image_file:
image_file.write(image_data)
return image_count
# 실행 부분
docx_path = "/path/to/your/file.docx"
output_folder = "/path/to/output/images"
image_count = extract_images_from_docx(docx_path, output_folder)
print(f"Extracted {image_count} images.")
n8n에서 스크립트 실행
- Execute Command Node를 사용하여 위의 Python 스크립트를 실행합니다.
- 스크립트 실행 후, 추출된 이미지 파일을 n8n 워크플로우에서 활용할 수 있습니다.
8.3 결과 저장 및 활용
- Read Binary File Node를 사용하여 추출된 이미지 파일을 로드합니다.
- 이미지를 다른 시스템으로 전송하거나, 추가적인 이미지 처리 작업을 수행할 수 있습니다.
- 예를 들어, FTP Node를 사용하여 서버에 업로드하거나, Email Node를 사용하여 이메일로 전송할 수 있습니다.
n8n을 활용하여 다양한 문서 및 이미지 파일에서 텍스트와 이미지를 추출하고, 이를 저장하거나 다른 시스템으로 전송하는 워크플로우를 구축하는 방법입니다. n8n의 강력한 자동화 기능과 외부 도구를 조합하여 업무 효율을 크게 향상시킬 수 있습니다.
추가 팁
- 오류 처리: 워크플로우 실행 중 발생하는 오류를 처리하기 위해 Error Workflow를 설정하면 안정적인 자동화를 구축할 수 있습니다.
- 보안 고려: 외부 API나 서버에 데이터를 전송할 때는 인증 정보와 데이터 보안을 철저히 관리해야 합니다. n8n의 Credentials 기능을 활용하여 안전하게 인증 정보를 저장할 수 있습니다.
- 환경 변수 사용: 경로 및 설정 값을 하드코딩하지 않고 환경 변수를 사용하면 워크플로우를 더 유연하게 관리할 수 있습니다.
참고 자료
- n8n 공식 문서: https://docs.n8n.io/
- Tesseract-OCR GitHub: https://github.com/tesseract-ocr/tesseract
- PyMuPDF 문서: https://pymupdf.readthedocs.io/en/latest/
- python-docx 문서: https://python-docx.readthedocs.io/en/latest/
- Hancom Docs Conversion API: https://www.hancomdocs.com/
이렇게 구성하면 다양한 파일 형식의 텍스트와 이미지를 자동으로 추출하고, 필요한 작업을 추가로 수행할 수 있습니다.
댓글