제퍼넷 로고

원본 PDF 형식을 유지하여 Amazon Textract, Amazon Translate 및 PDFBox로 번역된 문서 보기 | 아마존 웹 서비스

시간

다양한 산업 분야의 회사에서 대량의 PDF 문서를 생성, 스캔 및 저장합니다. 대부분의 경우 콘텐츠는 텍스트가 많고 종종 다른 언어로 작성되며 번역이 필요합니다. 이 문제를 해결하려면 이러한 PDF 내의 콘텐츠를 추출하고 빠르고 비용 효율적으로 번역할 수 있는 자동화된 솔루션이 필요합니다.

많은 기업은 다양한 글로벌 사용자를 보유하고 있으며 이들 간의 교차 언어 커뮤니케이션을 가능하게 하기 위해 텍스트를 번역해야 합니다. 이것은 수동적이고 느리고 비용이 많이 드는 인간의 노력입니다. 원본 문서 형식을 유지하면서 문서를 번역할 수 있는 확장 가능하고 안정적이며 비용 효율적인 솔루션을 찾아야 합니다.

의료와 같은 수직 분야의 경우 규제 요구 사항으로 인해 번역된 문서에는 기계 번역된 문서의 유효성을 확인하기 위해 루프에 추가 사람이 필요합니다.

번역된 문서가 원래 형식과 구조를 유지하지 않으면 컨텍스트가 손실됩니다. 이로 인해 인간 검토자가 검증하고 수정하기가 어려울 수 있습니다.

이 게시물에서는 원본 문서 구조와 서식을 유지하면서 스캔한 PDF에서 새로운 번역된 PDF를 만드는 방법을 시연합니다. 아마존 텍사스, 아마존 번역아파치 PDFBox.

솔루션 개요

이 게시물에 제시된 솔루션은 다음 구성 요소를 사용합니다.:

  • 아마존 텍사스 – 스캔한 문서에서 인쇄된 텍스트, 손글씨 및 기타 데이터를 자동으로 추출하는 완전 관리형 기계 학습(ML) 서비스로, 양식과 테이블에서 데이터를 식별, 이해 및 추출하기 위해 단순한 광학 문자 인식(OCR)을 넘어섭니다. Amazon Textract는 재무 보고서, 의료 기록 및 세금 양식을 비롯한 다양한 문서에서 텍스트를 감지할 수 있습니다.
  • 아마존 번역 – 빠르고 고품질이며 저렴한 언어 번역을 제공하는 신경망 기계 번역 서비스입니다. Amazon Translate는 번역 비용을 줄이면서 2,970개 이상의 언어 쌍에서 고품질 온디맨드 및 배치 번역 기능을 제공합니다.
  • PDF 번역 – Java로 작성되고 게시된 오픈 소스 라이브러리 GitHub의 AWS 샘플. 이 라이브러리에는 Amazon Textract 및 Amazon Translate를 사용하여 원하는 언어로 번역된 PDF 문서를 생성하는 논리가 포함되어 있습니다. 또한 오픈 소스 Java 라이브러리 Apache PDFBox를 사용하여 PDF 문서를 생성합니다. 예를 들어 다른 프로그래밍 언어에서 사용할 수 있는 유사한 PDF 처리 라이브러리가 있습니다. 노드 PDFBox.

기계 번역을 수행하는 동안 이름이나 고유 식별자와 같은 텍스트의 특정 섹션이 번역되지 않도록 보존하려는 상황이 있을 수 있습니다. Amazon Translate는 태그 수정을 허용하므로 번역하지 말아야 할 텍스트를 지정할 수 있습니다. Amazon Translate는 번역 출력의 형식 수준을 사용자 지정할 수 있는 형식 사용자 지정도 지원합니다.

Amazon Textract 제한에 대한 자세한 내용은 다음을 참조하십시오. Amazon Textract의 할당량.

솔루션은 현재 영어, 스페인어, 이탈리아어, 포르투갈어, 프랑스어 및 독일어를 지원하는 Amazon Textract에서 추출할 수 있는 언어로 제한됩니다. 이러한 언어는 Amazon Translate에서도 지원됩니다. Amazon Translate에서 지원하는 전체 언어 목록은 다음을 참조하십시오. 지원되는 언어 및 언어 코드.

다음 PDF를 사용하여 텍스트를 영어에서 스페인어로 번역하는 방법을 보여줍니다. 이 솔루션은 서식 없이 번역된 문서 생성도 지원합니다. 번역된 텍스트의 위치는 유지됩니다. 원본 및 번역된 PDF 문서는 다음에서도 찾을 수 있습니다. AWS 샘플 GitHub 리포지토리.

다음 섹션에서는 로컬 컴퓨터에서 번역 코드를 실행하는 방법을 보여주고 번역 코드를 자세히 살펴봅니다.

사전 조건

시작하기 전에 AWS 계정과 AWS 명령 줄 인터페이스 (AWS CLI). Textract 및 Translate와 같은 AWS 서비스에 액세스하려면 적절한 IAM 권한이 필요합니다. 최소 권한 사용을 권장합니다. IAM 권한에 대한 자세한 내용은 다음을 참조하십시오. IAM의 정책 및 권한 만큼 잘 Amazon Textract가 IAM과 작동하는 방식Amazon Translate가 IAM과 작동하는 방식.

로컬 머신에서 번역 코드 실행

이 솔루션은 PDF 문서를 추출하고 번역하는 독립 실행형 Java 코드에 중점을 둡니다. 이것은 가장 잘 렌더링된 번역된 PDF 문서를 얻기 위한 더 쉬운 테스트 및 사용자 정의를 위한 것입니다. 그런 다음 코드를 자동화된 솔루션에 통합하여 AWS에서 배포하고 실행할 수 있습니다. 보다 Amazon Translate 및 Amazon Textract를 사용하여 PDF 문서 번역 다음을 사용하는 샘플 아키텍처의 경우 아마존 단순 스토리지 서비스 (Amazon S3) 문서를 저장하고 AWS 람다 코드를 실행합니다.

로컬 시스템에서 코드를 실행하려면 다음 단계를 완료하십시오. 코드 예제는 다음에서 사용할 수 있습니다. GitHub 레포.

  1. GitHub 리포지토리를 복제합니다.
    git clone https://github.com/aws-samples/amazon-translate-pdf

  2. 다음 명령을 실행하십시오.
    cd amazon-translate-pdf

  3. 영어에서 스페인어로 번역하려면 다음 명령을 실행하십시오.
    java -jar target/translate-pdf-1.0.jar --source en --translated es

문서 폴더에 원래 서식이 있는 것과 없는 두 개의 번역된 PDF 문서가 생성됩니다(SampleOutput-es.pdfSampleOutput-min-es.pdf).

번역된 PDF를 생성하는 코드

다음 코드 스니펫은 PDF 문서를 가져오고 해당 번역된 PDF 문서를 생성하는 방법을 보여줍니다. Amazon Textract를 사용하여 텍스트를 추출하고 번역된 텍스트를 이미지에 레이어로 추가하여 번역된 PDF를 생성합니다. 게시물에 표시된 솔루션을 기반으로 합니다. Amazon Textract를 사용하여 스캔한 문서에서 자동으로 검색 가능한 PDF 생성.

코드는 먼저 Amazon Textract를 사용하여 각 텍스트 줄을 가져옵니다. Amazon Translate는 번역된 텍스트를 가져오고 번역된 텍스트의 기하학을 저장하는 데 사용됩니다.

Region region = Region.US_EAST_1;
TextractClient textractClient = TextractClient.builder() .region(region) .build(); // Get the input Document object as bytes
Document pdfDoc = Document.builder() .bytes(SdkBytes.fromByteBuffer(imageBytes)) .build(); TranslateClient translateClient = TranslateClient.builder() .region(region) .build(); DetectDocumentTextRequest detectDocumentTextRequest = DetectDocumentTextRequest.builder() .document(pdfDoc) .build(); // Invoke the Detect operation
DetectDocumentTextResponse textResponse = textractClient.detectDocumentText(detectDocumentTextRequest); List<Block> blocks = textResponse.blocks();
List<TextLine> lines = new ArrayList<>();
BoundingBox boundingBox; for (Block block : blocks) { if ((block.blockType()).equals(BlockType.LINE)) { String source = block.text(); TranslateTextRequest requestTranslate = TranslateTextRequest.builder() .sourceLanguageCode(sourceLanguage) .targetLanguageCode(destinationLanguage) .text(source) .build(); TranslateTextResponse resultTranslate = translateClient.translateText(requestTranslate); boundingBox = block.geometry().boundingBox(); lines.add(new TextLine(boundingBox.left(), boundingBox.top(), boundingBox.width(), boundingBox.height(), resultTranslate.translatedText(), source)); }
}
return lines;

글꼴 크기는 다음과 같이 계산되며 쉽게 구성할 수 있습니다.

int fontSize = 20;
float textWidth = font.getStringWidth(text) / 1000 * fontSize;
float textHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
 
if (textWidth > bbWidth) {
    while (textWidth > bbWidth) {
        fontSize -= 1;
        textWidth = font.getStringWidth(text) / 1000 * fontSize;
        textHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
     }
} else if (textWidth < bbWidth) {
     while (textWidth < bbWidth) {
         fontSize += 1;
         textWidth = font.getStringWidth(text) / 1000 * fontSize;
         textHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
      }
}

번역된 PDF는 저장된 형상과 번역된 텍스트에서 생성됩니다. 번역된 텍스트의 색상 변경을 쉽게 구성할 수 있습니다.

float width = image.getWidth();
float height = image.getHeight();
 
PDRectangle box = new PDRectangle(width, height);
PDPage page = new PDPage(box);
page.setMediaBox(box);
this.document.addPage(page); //org.apache.pdfbox.pdmodel.PDDocument
 
PDImageXObject pdImage;
 
if(imageType == ImageType.JPEG){
    pdImage = JPEGFactory.createFromImage(this.document, image);
} else {
    pdImage = LosslessFactory.createFromImage(this.document, image);
}
 
PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.OVERWRITE, false);
 
contentStream.drawImage(pdImage, 0, 0);
contentStream.setRenderingMode(RenderingMode.FILL);
 
for (TextLine cline : lines){
    String clinetext = cline.text;
    String clinetextOriginal = cline.originalText;
                           FontInfo fontInfo = calculateFontSize(clinetextOriginal, (float) cline.width * width, (float) cline.height * height, font);
    //config to include original document structure - overlay with original
    contentStream.setNonStrokingColor(Color.WHITE);
    contentStream.addRect((float) cline.left * width, (float) (height - height * cline.top - fontInfo.textHeight), (float) cline.width * width, (float) cline.height * height);
    contentStream.fill();
 
    fontInfo = calculateFontSize(clinetext, (float) cline.width * width, (float) cline.height * height, font);
    //config to include original document structure - overlay with translated
    contentStream.setNonStrokingColor(Color.WHITE);
    contentStream.addRect((float) cline.left * width, (float) (height - height * cline.top - fontInfo.textHeight), (float) cline.width * width, (float) cline.height * height);
    contentStream.fill();
    //change the output text color here
    fontInfo = calculateFontSize(clinetext.length() <= clinetextOriginal.length() ? clinetextOriginal : clinetext, (float) cline.width * width, (float) cline.height * height, font);
    contentStream.setNonStrokingColor(Color.BLACK);
    contentStream.beginText();
    contentStream.setFont(font, fontInfo.fontSize);
    contentStream.newLineAtOffset((float) cline.left * width, (float) (height - height * cline.top - fontInfo.textHeight));
    contentStream.showText(clinetext);
    contentStream.endText();
}
contentStream.close()

다음 이미지는 원래 형식으로 스페인어로 번역된 문서를 보여줍니다(SampleOutput-es.pdf).

다음 이미지는 서식 없이 스페인어로 번역된 PDF를 보여줍니다(SampleOutput-min-es.pdf).

처리 시간

고용 지원서 pdf는 번역된 pdf를 추출, 처리 및 렌더링하는 데 약 10초가 걸렸습니다. 문서와 같이 텍스트가 많은 문서의 처리 시간 독립 선언 PDF는 XNUMX분도 채 걸리지 않았습니다.

비용

Amazon Textract에서는 처리된 페이지 및 이미지 수에 따라 사용한 만큼 비용을 지불합니다. Amazon Translate에서는 처리되는 텍스트 문자 수에 따라 사용한 만큼 요금을 지불합니다. 인용하다 Amazon Textract 요금Amazon Translate 요금 실제 비용.

결론

이 게시물은 Amazon Textract 및 Amazon Translate를 사용하여 원본 문서 구조를 유지하면서 번역된 PDF 문서를 생성하는 방법을 보여주었습니다. 선택적으로 Amazon Textract 결과를 후처리하여 번역 품질을 개선할 수 있습니다. 예를 들어 추출된 단어는 다음과 같은 ML 기반 맞춤법 검사를 통해 전달될 수 있습니다. 심스펠 데이터 유효성 검사를 위해 또는 클러스터링 알고리즘을 사용하여 읽기 순서를 유지할 수 있습니다. 당신은 또한 사용할 수 있습니다 아마존 증강 AI (Amazon A2I) 개인 인력을 사용하여 원본 및 번역된 PDF 문서를 검토하여 더 정확하고 컨텍스트를 제공할 수 있는 인적 검토 워크플로를 구축합니다. 보다 Amazon Translate 및 Amazon Augmented AI를 사용한 휴먼 리뷰 워크 플로우 설계도메인별 및 언어별 사용자 지정을 통해 다국어 문서 번역 워크플로 구축 시작하는.


저자에 관하여

아누바 싱갈 AWS Professional Services 조직의 Amazon Web Services에서 수석 클라우드 설계자입니다.

숀 로렌스 이전에는 AWS의 프런트 엔드 엔지니어였습니다. 그는 AWS Professional Services 조직과 Amazon Privacy 팀에서 프런트 엔드 개발을 전문으로 했습니다.

spot_img

최신 인텔리전스

spot_img