이번 포스팅에서는 구글번역 API를 통해, 현재 열려있는 파워포인트와 엑셀파일을 번역하는 방법에 대해 알아보겠습니다.
구글 번역 API?
상세히 구글 번역기에 대해 다루지는 않겠습니다. 무료 버전과 유료 버전이 있고, 다소 제한이 있는 듯하나 이번 포스팅에서는 무료 버전에 대해 알아보겠습니다. 아래와 같이 구글 번역기를 설치합니다.
pip install googletrans
간단한 코드 사용법은 다음과 같습니다.
1 2 3 4 5 | from googletrans import Translator translator = Translator() result = translator.translate("내 이름은 두니입니다.", dest="English") print(result.text) | cs |
dest
가 번역할 언어이며, 영어는 English
, 한글은 Korean
, 일어는 ja
등 다양한 언어로 번역이 가능합니다. 이 때, 번역된 내용은 result.text
로 활용하시면 됩니다.
현재 열려 있는 파워포인트 파일 번역하기
대체로 파이썬을 활용한 PPT 번역기들을 보면, 이미 저장된 ppt파일을 읽어들이는 경우가 많고, 또 그게 더 효율적인 것 같긴 합니다만.. 이번 포스팅에서는 현재 열려 있는 파워포인트 창을 읽어들여서 실시간(?)으로 번역하는 방법에 대해 서술하고자 합니다.
먼저 아래와 같이 win32com을 설치합니다.
pip install win32com
저는 파이참을 주로 사용하는데, 파이참에서는 win32compat으로 되어있던 것 같네요.
상세 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import win32com.client from googletrans import Translator translator = Translator() Application = win32com.client.Dispatch("PowerPoint.Application") Presentation = Application.Activepresentation slidenum = Presentation.Slides.Count # 특정 페이지에 해당하는 slide for i in range(1, slidenum+1): slide = Presentation.slides(i) shape = slide.shapes for s in shape: if s.HasTextFrame: # TextFrame 번역하기 result = translator.translate(s.TextFrame.TextRange.Text, dest="Korean") s.TextFrame.TextRange.Text = result.text if s.HasTable: # 표 번역하기 cols = s.Table.Columns.Count rows = s.Table.Rows.Count for j in range(1, rows+1): for k in range(1, cols+1): result = translator.translate(s.Table.Cell(j, k).Shape.TextFrame.TextRange.Text, dest="Korean") s.Table.Cell(j, k).Shape.TextFrame.TextRange.Text = result.text | cs |
코드는 단순합니다.
현재 열려있는 파워포인트 창을 열고, MS OFFICE에서 제공하는 vba함수와 동일한(?) 객체들을 활용해서 제어합니다. 위 예제는 그 중에서도 텍스트 상자와 표만을 대상으로 번역하는 코드입니다.
s.HasTextFrame
: 텍스트 프레임을 가지고 있다면, 그 안의 내용을 번역s.HasTable
: 표는 텍스트 프레임이 아니기 때문에 별도로 구분하여 인식 및 번역
테이블 같은 경우, row와 column을 통해 각각의 행과 열에 접근할 수 있습니다. 행, 열에 해당하는 텍스트를 불러와서 번역하는 방식입니다.
엑셀 파일 번역하기
엑셀도 파워포인트와 방식은 동일합니다. 다만, 파워포인트처럼 텍스트프레임, 테이블을 구분할 필요가 없습니다. 애초에 엑셀은 그냥 테이블이기 때문입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from googletrans import Translator import win32com.client # translator = Translator() excel = win32com.client.Dispatch('Excel.Application') # sheet = excel.activesheet rowTarget = int(input("사용하고 있는 최대 행 개수를 입력하세요: ")) colTarget = int(input("사용하고 있는 최대 열 개수를 입력하세요: ")) for r in range(1, rowTarget+1): for h in range(1, colTarget+1): if sheet.Cells(r, h).Value is not None: result = translator.translate(sheet.Cells(r, h).Value, dest="Korean") sheet.Cells(r, h).Value = result.text | cs |
코드는 역시 단순합니다.
코드를 보시면 유저가 각 행, 열의 개수를 입력하게 되어 있습니다. for문을 두번 돌려서 행과 열에 접근할 것이기 때문에, 얼마나 루프문을 돌릴지 제한을 두기 위해서입니다.
각 행, 열에 해당하는 항목을 불러와서 번역하게 되어있습니다.
중간에 if sheet.Cells(r, h).Value is not None
이라는 부분을 통해 엑셀에 입력된 부분만 번역되도록 의도했으나,
생각해보니 if문을 넣는다는 것 자체가 저 value를 계속 계산하라는 것이기 때문에... 큰 의미가 없는 부분입니다. 즉, 굳이 if문을 둘 필요는 없습니다.
오늘은 이렇게 간단하게 파이썬을 이용하여 파일에 접근, 번역하는 방법에 대해 알아보았습니다.
'Developer > Python' 카테고리의 다른 글
[파이썬 셀레니움] 프라이탁 신제품을 실시간으로 확인하기2 (13) | 2020.09.04 |
---|---|
[파이썬 셀레니움] 프라이탁 신제품을 실시간으로 확인하기1 (109) | 2020.09.03 |
[Python] Matplotlib 이벤트 핸들링 (마우스 이벤트, 키보드 이벤트) (0) | 2020.07.30 |
[파이썬] Pyinstaller, cx_Freeze 사용법 (exe 파일 생성) (0) | 2020.07.29 |
[Python] 공적 마스크 API 활용하여 지도로 구현하기 (Folium 라이브러리 적용) (0) | 2020.03.16 |
댓글