ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python/구글번역기를 위해 문서를 읽고 5000자 이내의 내용을 클립보드로 복사하는 프로그램
    코딩/Python 2024. 8. 2. 23:58
    728x90

    업무를 하다보면 구글 번역기를 사용하는 일이 자주 있다. 1차 번역을 구글 번역기로 돌리고 2차로 문서를 읽어 가면서 번역이 이상한 곳을 수정한다.

     

    내용이 얼마 되지 않으면 문제가 없는데 5000자를 넘어가면 문제가 발생한다. 구글 번역기는 5000자가 넘어가면 번역이 되지 않기 때문이다. 물론 워드문서를 직접 업로드해서 전체적으로 번역하는 방법을 구글이 제시하기는 한다. 하지만 그 방식으로 번역한 것은 번역품질이 꽤 낮다. 수동으로 5000자 이내를 번역하는 것이 훨씬 낫다.

     

    그런데 문제는 5000자씩을 끊어서 구글번역기에 돌리는 것이 상당한 노가다란 점이다. 5000자를 세어가며 복사하는 일이 보통이 아니다. 그래서 5000자씩 세어가며 클립보드에 복사해주는 프로그램을 만들었다.

     

    꽤 심플하다.

    • 문서를 텍스트 파일에 저장한다.
    • 프로그램을 실행시킨다.
    • 저장된 문서를 읽고 5000자 이내의 내용을 클립보드로 복사한다.
    • 화면에는 현재까지 읽은 줄 번호가 출력된다.
    • 구글 번역기에 붙여넣는다.
    • 번역본을 저장할 텍스트 파일읉 열어놓은 채 번역된 내용을 복사해서 붙여넣는다.
    • 이 과정을 반복한다.
    • 만일 실수했다면 프로그램을 종료하고 화면에 출력된 줄 번호가 나올 때까지 엔터를 누르고 실수한 부분에서 다시 시작한다.

    이것조차 꽤 노가다라서 다음에는 구글 번역기를 크롬드라이버로 자동화시키는 것을 만들어봐야겠다. 가능할지는 모르겠다. 대개 구글은 로봇을 싫어해서 못하게 막아뒀을 수도 있다.(자기들도 로봇으로 구글링하면서...)

    # 텍스트를 클립보드로 복사해주는 라이브러리
    import pyperclip
    
    # 원본 파일 경로
    fp = '/your/path/doc.txt'
    
    # 텍스트를 저장할 스트링 변수
    lines1 = ''
    lines2 = ''
    
    # 텍스트 읽기 모드로 파일 열기
    with open(fp, 'rt') as f:
        # 인덱스번호, 줄 내용을 한 줄씩 열거
        for i, line in enumerate(f):
            # 인덱스번호 출력
            print(i)
    
            # lines2에 새 줄 내용 추가
            lines2 = lines1 + line
    
            # lines2가 5000자가 넘으면 lines1을 클립보드로 복사하고
            # 사용자 입력 기다린다.
            # q가 입력되면 프로그램 종료
            # 아니면 현재 줄로 lines1 초기화
            if len(lines2) > 5000:
                # lines1을 클립보드에 복사
                pyperclip.copy(lines1)
    
                # 사용자 입력
                task = input('Press (enter) after translate or (q)uit: ')
    
                # 사용자 입력값이 q이면 종료
                if task.lower() == 'q':
                    quit()
    
                else:
                    # 현재 line으로 lines1 초기화
                    lines1 = line
    
            else:
                lines1 = lines2
    
        # 나머지 내용 클립보드로 복사 후 종료
        pyperclip.copy(lines2)
    728x90

    댓글

Designed by Tistory.