포스트

[졸업 프로젝트] 전체적인 구상도

정승우

할 거

  • 문제 정의

    간단히 정리하면 ppt나 pptx를 RAG로 학습시키기 용이하게 텍스트로 변환하는 것이다

    요구하는 내용은 다음과 같다.

    1. 사진에 있는 table과 plaintext를 마크다운으로 추출하기
    2. 1번이 아닌 사진이라면, 간단한 description을 출력할 것
  • ppt와 pptx가 무엇인가(진행 중)

    그 전에 앞서 위 파일 확장자에 대해 이해할 필요가 있다.

    일단 ppt는 바이너리 파일 + CFB 포맷이고, pptx는 OOXML 포맷이다.

    우리 문제에서 문제가 될 만한 부분은 결국 이미지인데, 아마 파이프라인에서 ppt를 전부 pptx로 변환하여 문제를 단순화할 때 ppt에서의 여러 구성요소(표, 도형 등)이 사진으로 변할 가능성이 존재한다.

    일단 이정도까지만 찾아보고 더 자세한 구조는 아래 페이지를 참고해야함(안봄)

    https://www.loc.gov/preservation/digital/formats/fdd/fdd000511.shtml

    https://learn.microsoft.com/ko-kr/openspecs/office_file_formats/ms-ppt/6be79dde-33c1-4c1b-8ccc-4b2301c08662

    https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b

    https://www.loc.gov/preservation/digital/formats/fdd/fdd000399.shtml

    https://ecma-international.org/publications-and-standards/standards/ecma-376/

    https://support.microsoft.com/en-us/office/about-compatibility-mode-in-powerpoint-aa6983bb-7858-40c5-bcc8-756faa7d29b0

  • ppt2pptx open source

    MS Office의 공식 기능을 이용하여 변환을 수행한다.

    문제점으로는 폰트가 깨질 수 있지만 어차피 마크다운이라 상관없다

    예제) 아래 코드는 PowerPoint를 설치해 둔 Windows에서 PowerShell로 PowerPoint를 조용히 띄워서 .SaveAs로 pptx로 저장시키는 방식이다.

    공식 지원 메서드이다.

    https://learn.microsoft.com/en-us/office/vba/api/powerpoint.presentation.saveas

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
      $in  = "C:\ppt\in"
      $out = "C:\ppt\out"
      New-Item -ItemType Directory -Force -Path $out | Out-Null
        
      $ppt = New-Object -ComObject PowerPoint.Application
      $ppt.Visible = [Microsoft.Office.Core.MsoTriState]::msoFalse
        
      Get-ChildItem $in -Filter *.ppt | ForEach-Object {
          $src = $_.FullName
          $dst = Join-Path $out ($_.BaseName + ".pptx")
        
          $pres = $ppt.Presentations.Open($src, $true, $true, $false) # ReadOnly, Untitled, WithWindow
          # 24 = ppSaveAsOpenXMLPresentation (.pptx)  (일반적으로 이 값이 .pptx)
          $pres.SaveAs($dst, 24)
          $pres.Close()
      }
        
      $ppt.Quit()
      [System.Runtime.InteropServices.Marshal]::ReleaseComObject($ppt) | Out-Null
      [GC]::Collect()
      [GC]::WaitForPendingFinalizers()
        
    

    물론, 다른 오픈소스 또한 존재하는데 ex) soffice. 위 방식이 된다면 굳이? 해야되나 싶다.

  • pptx2md open source(진행 중)

    https://github.com/ssine/pptx2md

    이전에 ppt 2개 정도를 예제로 돌려보았을 때 어느정도 준수한 성능을 얻었다.

    이 오픈소스에서 어찌보면 가장 중요한 부분은 python-ppt open source를 내부적으로 이용한다는 것이다,

    따라서 이에 대해 공부해야 할 가능성도 존재한다.

    생각해야 할 부분은 다음과 같다.

    1. 위의 오픈소스가 사진을 100% 추출 가능한지
    2. 내부적인 파이프라인 이해
    3. pptx의 구성 요소를 어떻게 잘 버리는지.
  • OCR open source + description(진행 중)

    여러 가지 방법론이 존재할 수 있다고 생각한다.

    여러가지 드는 생각은

    1. 그냥 잘해주는 api찾아서 진행하기(보통 LLM쪽 API)
    2. 중간 과정 JSON을 해주는 api가 많아 보여서 JSON → Markdown을 해야할 수도 있음(성능 측정 필요)

    Mathpix

    Azure Document, Google Document, …

    결국 성능 측정을 해보려면 직접 해보는 것이 중요하다.

  • 파이프라인 구상도

    따라서 정리하면 다음과 같다.

    ppt → pptx → markdown with non-OCRed photos → markdown with OCRed photos

  • Complex Table Problem(진행 중)

    PPTX는 테이블 안의 테이블 구조를 표현할 수 있다.

    하지만, 마크다운은 테이블 안의 테이블을 표현 불가능하다.

    이러한 구조를 지키기 위해서는 JSON같은 추가적인 도구가 필요하나.

    기업에서 요구하는 결과는 순수한 마크다운 파일이므로 이러한 구조적인 문제를 해결할 생각도 해야한다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.