(DeepL용) python으로 개행 문자 처리해주기
- 목차
https://github.com/woojangchang/tkinter_apps/tree/master/ctrlc
1. 왜 필요해?
PDF로 된 논문들을 읽을 때, 쉽게 읽히지 않으면 번역기를 써야하는 상황이 생긴다. 그 중에서 DeepL 번역기의 성능도 괜찮고 프로그램도 편리해서 자주 사용하고 있다. 하지만 PDF 내용을 복사 붙여넣기를 하면 개행문자 때문에 제대로 번역이 되지 않는 경우가 있다.
근데 그렇다고 꼭 DeepL에만 쓸 수 있는 프로그램은 아니고, 구글이나 파파고처럼 웹 번역기에도 당연히 사용할 수 있는 매우 단순한 프로그램이다.
위 내용을 복붙하면 아래와 같이 개행이 되어 나오고 이를 번역기에 넣으면 제대로 된 번역 결과가 나오지 않는다.
제대로 된 번역 결과를 위해서는 위 개행 문자를 다 지우고 재번역을 해야한다. 이 작업도 가끔이라면 할 수 있겠으나 횟수가 많아지면 매우 번거롭다. 그래서 python으로 개행 문자를 지우도록 시도해보았다.
2. 프로그램 작동 원리
프로그램이 클립보드 정보를 받아와서 개행 문자를 없앤 뒤 다시 클립보드에 저장한다. 이 때 이전 클립보드 내용과 이후 클립보드 내용이 같으면 굳이 처리할 필요가 없으니 체크하는 코드를 추가한다.
그리고 개행 문자를 없애는 코드를 통하면 이미지나 서식 같은 게 다 사라지기 때문에 프로그램 작동을 껐다 켤 수 있는 기능도 넣었다.
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` 개행문자가 있어 그것도 제거해주니 잘 작동했다.
'파이썬 Python > tkinter' 카테고리의 다른 글
이미지를 확인하면서 각 폴더로 분류하는 프로그램 (0) | 2024.02.11 |
---|---|
참가자 중에서 랜덤으로 뽑는 프로그램 (python) (0) | 2024.01.31 |