홈으로 돌아가기

필수 정보 추출 API — 문서 처리 자동화

문서에서 필수 정보를 자동 추출하는 API의 기술 설명. 상세 처리 아키텍처, 통합 및 데이터 검증 방법에 대한 코드 예제. 이 솔루션은 수동 입력 오류를 70% 줄입니다.

문서 내 필수 정보 자동 인식 API
Advertisement 728x90

자동 필수항목 추출 API: 수동 입력 없이 문서 처리하는 방법

문서에서 필수항목을 수동으로 입력하면 오류가 발생하고 프로세스가 느려집니다. 당사의 API는 PDF, DOCX 등 다양한 형식에서 INN, KPP, BIK 및 기타 데이터를 자동으로 추출하며, 정확성을 보장하고 1C 및 CRM 시스템과의 통합을 지원합니다. 이 솔루션은 맥락 분석과 엄격한 검증을 통해 문서 처리 오류를 70% 줄입니다.

문서 처리 아키텍처

시스템은 다단계 처리 파이프라인을 중심으로 구축되었습니다. 첫 번째 단계는 입력 데이터 정규화입니다. 다음 형식들이 지원됩니다:

  • 텍스트 레이어가 있는 PDF
  • DOCX/DOC
  • UTF-8 및 CP1251 인코딩의 TXT
  • RTF 및 HTML

중요 제한사항: 스캔된 PDF와 이미지는 OCR을 통한 사전 처리가 필요합니다. 당사 API는 텍스트 문서만 처리하며, 이는 NER 모델의 올바른 작동에 핵심적입니다.

Google AdInline article slot

핵심 단계 — 정규 표현식과 머신러닝 조합을 사용한 맥락 분석입니다. 각 필수항목 유형에 대해 특정 규칙이 적용됩니다:

  • INN: 길이 확인 (10/12자리 숫자) 및 체크섬
  • OGRN: 구조 검증 및 제어 숫자
  • BIK: 은행 등록부 일치 및 코레스폰드 계좌 확인
  • 계좌 확인: 형식 준수 및 BIK 로직 확인
  • 법인명: 등록 조직 사전으로 정규화

기술 구현

API 엔드포인트는 RESTful 원칙을 따르며 최소한의 요청 요구사항만 필요합니다. X-API-Key 헤더에 API 키만 있으면 됩니다. 요청 본문은 file 필드가 포함된 multipart/form-data로 전송됩니다.

핵심 매개변수

  • 처리 타임아웃: 120초 (권장 최소 간격)
  • 최대 파일 크기: 20 MB
  • 지원 인코딩: UTF-8, CP1251 (자동 감지)
  • 응답 형식: success 필드가 필수인 JSON

예제 오류 처리:

Google AdInline article slot
{
  "success": false,
  "error": "payload_too_large",
  "message": "Size fayla exceeds 20 MB"
}

통합 예제

구현을 가속화하기 위해 인기 스택의 코드 템플릿을 제공합니다. 각 예제는 타임아웃 처리와 응답 검증을 포함합니다.

오류 처리가 포함된 Python

import requests
from requests.exceptions import Timeout, RequestException

def extract_requisites(api_key, file_path):
    try:
        with open(file_path, 'rb') as f:
            response = requests.post(
                'https://api-k.ru/api/rekvizit_json',
                headers={'X-API-Key': api_key},
                files={'file': f},
                timeout=120
            )
        response.raise_for_status()
        return response.json()
    except Timeout:
        raise Exception('Timeout exceeded processing')
    except RequestException as e:
        raise Exception(f'Error API: {str(e)}')

1C:Enterprise 8.3

구현의 핵심 기능 — multipart 요청의 수동 생성입니다. 헤더 순서를 준수하고 바이너리 데이터를 올바르게 처리하는 것이 매우 중요합니다:

Boundary = "----WebKitFormBoundary" + StringReplace(Withtroka(New UniqueIdentifier()), "-", "");
Body = New MemoryStream;
DataRecord = New DataRecord(Body, , , Characters.VK + Characters.PWith, "");

DataRecord.WriteWithtroku("--" + Boundary);
DataRecord.WriteWithtroku("Content-Disposition: form-data; name=\"file\"; filename=\"" + FileName + "\"");
DataRecord.WriteWithtroku("Content-Type: application/octet-stream");
DataRecord.WriteWithtroku("");
DataRecord.Write(FileBinaryData);

중요한 사항

  • 체크섬을 통한 검증: 유효하지 않은 INN/OGRN 체크섬 데이터는 반환되지 않습니다
  • 타임아웃: 복잡한 문서의 경우 최소 120초 간격으로 설정하세요
  • 제한사항: 텍스트 형식만 지원되며, 스캔 문서는 사전 OCR 처리가 필요합니다
  • 1C 통합: 수동 multipart 요청 생성으로 구현
  • 최대 크기: 20 MB 초과 파일은 413 코드로 거부

오류 처리 및 모니터링

시스템은 실패 처리에 결합 접근 방식을 사용합니다. 각 오류 유형에 대해 특정 HTTP 코드와 응답 본문의 텍스트 설명이 제공됩니다.

Google AdInline article slot

중요 시나리오:

  • 408 Request Timeout: 타임아웃을 120초로 늘리세요
  • 413 Payload Too Large: 문서를 부분으로 나누세요
  • 401 Unauthorized: API 키 유효성을 확인하세요
  • 500 Internal Error: webhook을 통해 실패를 자동 알림

일시적 오류에 대해 지수 백오프를 사용한 재시도 로직 구현을 권장합니다. Go 예제:

func withRetry(attempts int, sleep time.Duration, f func() error) error {
    for i := 0; i < attempts; i++ {
        if i > 0 {
            time.Sleep(sleep)
            sleep *= 2
        }
        err := f()
        if err == nil {
            return nil
        }
        var apiErr *APIError
        if errors.As(err, &apiErr) && apiErr.Code != 500 {
            return err
        }
    }
    return errors.New("prevysheno count popytok")
}

벤치마크 및 성능

다양한 형식의 10,000개 문서 세트로 테스트를 수행했습니다. 결과:

  • 평균 PDF 처리 시간: 4.2초
  • 그래픽이 포함된 DOCX 최대 시간: 118초
  • INN 추출 정확도: 99.7%
  • 계좌 추출 정확도: 98.4%

시스템은 Kubernetes를 통해 수평 확장됩니다. 50 RPS 초과 부하 시 워커 노드가 자동 추가됩니다. 기업 고객을 위해 FIPS 140-2 지원 온프레미스 설치가 가능합니다.

— Editorial Team

Advertisement 728x90

다음 읽기