(DeepL용) python으로 개행 문자 처리해주기

    목차
반응형

https://github.com/woojangchang/tkinter_apps/tree/master/ctrlc

1. 왜 필요해?

PDF로 된 논문들을 읽을 때, 쉽게 읽히지 않으면 번역기를 써야하는 상황이 생긴다. 그 중에서 DeepL 번역기의 성능도 괜찮고 프로그램도 편리해서 자주 사용하고 있다. 하지만 PDF 내용을 복사 붙여넣기를 하면 개행문자 때문에 제대로 번역이 되지 않는 경우가 있다.

근데 그렇다고 꼭 DeepL에만 쓸 수 있는 프로그램은 아니고, 구글이나 파파고처럼 웹 번역기에도 당연히 사용할 수 있는 매우 단순한 프로그램이다.

Why do tree-based models still outperform deep learning on tabular data?의 Abstract

 

위 내용을 복붙하면 아래와 같이 개행이 되어 나오고 이를 번역기에 넣으면 제대로 된 번역 결과가 나오지 않는다.

DeepL 번역 결과

제대로 된 번역 결과를 위해서는 위 개행 문자를 다 지우고 재번역을 해야한다. 이 작업도 가끔이라면 할 수 있겠으나 횟수가 많아지면 매우 번거롭다. 그래서 python으로 개행 문자를 지우도록 시도해보았다.

 

 

2. 프로그램 작동 원리

프로그램이 클립보드 정보를 받아와서 개행 문자를 없앤 뒤 다시 클립보드에 저장한다. 이 때 이전 클립보드 내용과 이후 클립보드 내용이 같으면 굳이 처리할 필요가 없으니 체크하는 코드를 추가한다.

그리고 개행 문자를 없애는 코드를 통하면 이미지나 서식 같은 게 다 사라지기 때문에 프로그램 작동을 껐다 켤 수 있는 기능도 넣었다.

매우 단순한 프로그램 UI
프로그램 실행 후 DeepL 번역 결과

 

3. 전체 코드

 

import tkinter as tk
import pyperclip

class newline_eliminator:
    def __init__(self):
        # tkinter 윈도우 생성
        self.window = tk.Tk()
        self.window.title("PDF 복사기")

        self.previous_clipboard_content = ""
        self.is_running = False  # check_clipboard() 함수의 실행 여부를 저장하는 변수

        self.label = tk.Label(self.window, text="PDF 복사기", font=("Arial", 16))
        self.label.pack()

        self.start_button = tk.Button(self.window, text="실행", command=self.start, state="disabled")
        self.start_button.pack(pady=10)

        self.stop_button = tk.Button(self.window, text="중단", command=self.stop, state="disabled")
        self.stop_button.pack(pady=10)

        self.start()
        self.window.mainloop()  # tkinter 윈도우 실행

    # 클립보드를 주기적으로 확인하는 함수
    def check_clipboard(self):
        current_clipboard_content = pyperclip.paste()
        # print(current_clipboard_content)
        # 이전 클립보드와 현재 클립보드 내용이 다를 경우
        if current_clipboard_content != self.previous_clipboard_content:
            # "\n"을 " "로 변경
            updated_clipboard_content = current_clipboard_content.replace("\r\n", " ").replace("\n", " ")
            # 변경된 내용을 클립보드에 복사
            pyperclip.copy(updated_clipboard_content)
                    
            # 이전 클립보드 내용 업데이트
            self.previous_clipboard_content = updated_clipboard_content

        # 1초마다 클립보드 확인
        if self.is_running:
            self.window.after(1000, self.check_clipboard)


    # tkinter 윈도우 실행
    def start(self):
        self.is_running = True
        self.check_clipboard()
        self.label.config(text="실행 중", fg="red")
        self.start_button.config(state="disabled")
        self.stop_button.config(state="normal")
        self.window.title('PDF 복사기 (실행 중)')

    def stop(self):
        self.is_running = False
        self.window.after_cancel(self.check_clipboard)
        self.label.config(text="중단", fg="#555")
        self.start_button.config(state="normal")
        self.stop_button.config(state="disabled")
        self.window.title('PDF 복사기 (중단)')



if __name__ == "__main__":
    newline_eliminator()

처음에는 `\n`만 공백(` `)으로 바꿔줬으나 여전히 공백이 있었고, 확인해보니 `\r\n` 개행문자가 있어 그것도 제거해주니 잘 작동했다.

728x90
반응형