返回首页

提取必要信息的 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 密钥即可。请求体以 multipart/form-data 形式发送,包含 file 字段。

关键参数

  • 处理超时: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);

关键事项

  • 校验和验证:API 不会返回校验和无效的 INN/OGRN 数据
  • 超时:复杂文档至少设置 120 秒间隔
  • 限制:仅支持文本格式,扫描文档需预先 OCR 处理
  • 1C 集成:通过手动构建 multipart 请求实现
  • 最大大小:超过 20 MB 的文件以 413 码拒绝

错误处理和监控

系统采用组合方法处理故障。为每种错误类型提供特定的 HTTP 码和响应体中的文本描述。

Google AdInline article slot

关键场景:

  • 408 请求超时:将超时增加至 120 秒
  • 413 负载过大:将文档拆分成部分
  • 401 未授权:检查 API 密钥有效性
  • 500 内部错误:通过 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

继续阅读