문장-기계 만들기 09

2023. 3. 1. 00:00101Hz | 무한구매일기

문장-기계 만들기

09

 

 전호석

 

 

다음으로는 GUI(Graphical User Interface의 약자. 쉽게 말해 어떤 프로그램을 글자행이 아닌 그림으로 표현한 것.)을 만들어 보고자 했지만, 직접 그 일을 할 필요가 없어졌을지도 모른다. 

2022년 말 등장한 ChatGPT(https://chat.openai.com/chat)라는 프로그램 덕분이다. 말을 넣으면 합당한 말을 해주는 프로그램이다. 방대한 정보를 수집해 자료로 삼고, 대답을 만들어내는 연산이 아주 복잡하기 때문에 대답할 수 있는 분야와 대답의 질이 상당하다. 거기다 영어뿐만 아니라 한글로 질문해도 대답의 질이 상당히 높다. 프로그래머가 어떤 언어를 가르친 것이 아니라, 언어를 배우는 법을 정해 수 많은 언어를 그 방식에 따라 습득했기 때문일 것이다.

우선, ChatGPT에게 우리가 지금까지 만든 프로그램을 보여주고, 해당 프로그램에 대한 설명을 요청했다.

 

 

전호석 : 연결된 파이썬 모듈 두 가지를 보여드릴테니 해당 프로그램의 작동 방식을 알려주세요. 대화는 한글로 진행합시다.


ChatGPT : 네, 좋습니다. 먼저 보여주신 두 가지 파이썬 모듈을 알려주세요. 그리고 이 프로그램은 어떤 목적으로 사용되는지도 알려주세요.


전호석 : 첫번째

     #random 모듈에서 choice 함수를 불러옴
     from random import choice

     #파일 모듈을 불러와 파일처리 함수를 실행
     import 파일
     파일.파일처리()

     #while을 이용해 프로그램 계속 실행
     a=0
     while a==0 :
               
#엔터 입력 대기
              input("엔터를 누르면 문장이 만들어집니다")

               #파일에서 문자열 받아옴

              명사=open("명사.txt", 'r')
             명사묶음=명사.readlines()
             명사.close()
              동사=open("동사.txt", 'r')
              동사묶음=동사.readlines()
              동사.close()

             #무작위로 선택하고 줄바꿈 소거 후 출력
              선택명사=choice(명사묶음)
             선택명사=선택명사.strip()
             선택동사=choice(동사묶음)
             선택동사=선택동사.strip()
             print("\n",선택명사+"는",선택동사,"\n")


ChatGPT : 이 코드는 random 모듈에서 choice 함수를 사용하여 파일에서 단어를 무작위로 선택하고, 선택한 단어들을 조합하여 문장을 만들어 출력하는 간단한 프로그램인 것 같습니다.
먼저, random 모듈에서 choice 함수를 불러오고, 그 다음으로 파일 모듈에서 파일처리() 함수를 실행합니다. 이 함수는 아마도 파일을 열어서 필요한 작업을 수행하는 함수일 것으로 추측됩니다.
그 후에는 while 루프를 이용하여 계속해서 프로그램을 실행합니다. 사용자가 엔터를 누르면, 명사.txt와 동사.txt 파일에서 각각 한 줄씩 읽어와서 리스트에 저장합니다. 그리고 choice 함수를 사용하여 각각 무작위로 선택한 단어들을 조합하여 문장을 만들어 출력합니다.
이 프로그램은 간단한 문장 생성기로 활용할 수 있을 것으로 보입니다. 예를 들어, 명사.txt 파일에는 사물이나 인물 이름을, 동사.txt 파일에는 동사를 넣어두면, 이를 무작위로 조합하여 다양한 문장을 생성할 수 있습니다.


전호석 : 두번째

     def 파일처리():
     #os 모듈을 불러옴
             import os
     #명사 파일 없을 경우 명사 파일 생성.
             if not os.path.isfile("명사.txt") :
                 명사=open("명사.txt", 'w')
                 명사.write("강원도\n경기도\n경복궁\n경상도\n경주\n고구려\n희망\n희생\n흰색\n힘")
                 명사.close()

     #동사 파일 없을 경우 동사 파일 생성.
                  if not os.path.isfile("동사.txt") :
                       동사=open("동사.txt", 'w')
                     동사.write("가까워지다\n가꾸다\n가능해지다\n가다\n가라앉다\n희생하다\n힘들어하다\n힘쓰다")
                      동사.close()
     

ChatGPT : 이 코드는 os 모듈을 사용하여 파일이 존재하지 않을 경우, 해당 파일을 생성하고 초기 데이터를 넣는 함수입니다. 이 코드에서는 명사.txt와 동사.txt 파일이 존재하지 않을 경우, 이 파일들을 생성하고, 각각 초기 데이터를 넣습니다.
먼저, os 모듈을 불러옵니다. 그리고 if 문을 이용하여, not os.path.isfile("명사.txt") 또는 not os.path.isfile("동사.txt")의 결과가 참인 경우, 즉 해당 파일이 존재하지 않는 경우에만 아래의 코드를 실행합니다.
명사.txt 또는 동사.txt 파일을 쓰기 모드('w')로 열어서 초기 데이터를 넣습니다. 여기서는 단순한 예시로 명사와 동사를 각각 한 줄씩 넣었습니다. 그리고 파일을 닫습니다.
이 함수를 실행하면, 명사.txt와 동사.txt 파일이 존재하지 않을 경우에만 각각 파일을 생성하고 초기 데이터를 넣을 것입니다. 만약 이미 파일이 존재하면, 새로운 데이터가 추가되지 않고 기존의 데이터가 유지될 것입니다. 이 함수는 데이터 파일의 초기화를 위해 사용될 수 있습니다.


전호석 : 두 모듈을 모두 염두해서, 해당 프로그램을 다시 정리해 주세요.


ChatGPT : 해당 프로그램은 사용자가 엔터를 입력할 때마다 명사.txt 파일에서 임의의 명사와 동사.txt 파일에서 임의의 동사를 선택하여 문장을 만들고 출력하는 간단한 프로그램입니다.
프로그램은 random 모듈의 choice() 함수를 사용하여 파일에서 무작위로 단어를 선택합니다. 이를 위해 먼저 random 모듈에서 choice() 함수를 불러오고, 그 다음에는 파일 모듈에서 파일처리() 함수를 불러옵니다.
파일처리() 함수는 os 모듈을 사용하여 명사.txt와 동사.txt 파일이 존재하지 않을 경우에만 해당 파일들을 생성하고 초기 데이터를 넣습니다.
이후, while 문을 이용하여 사용자가 엔터를 입력할 때마다 문장을 만들어 출력하는 루프를 만듭니다. 이 루프 안에서는 open() 함수를 이용하여 명사.txt와 동사.txt 파일을 읽어오고, readlines() 함수를 이용하여 파일 안에 있는 단어들을 리스트 형태로 가져옵니다. 그 다음, random 모듈의 choice() 함수를 사용하여 무작위로 선택된 명사와 동사를 각각 strip() 함수를 이용하여 줄바꿈 문자를 제거하고, 이를 이용하여 문장을 만들어 출력합니다.
이 프로그램은 사용자가 엔터를 누르기 전까지 무한 루프를 돌며 문장을 생성하고 출력합니다. 프로그램을 종료하려면 사용자는 프로그램 실행 중에 ctrl+c를 눌러야 합니다.

 

ChatGPT는 우리가 지금까지 만든 문장-기계를 정확하게 꿰뚫어보고 있었다. GUI를 만들기 위해서 여러 자료를 찾아 볼 필요가 없는 것이다. 그저 ChatGPT에게 물어보기만 하면 된다.

 

전호석 : 해당 프로그램에 알맞는 GUI 코드를 만들어 주세요. 삽입 위치도 알려주세요.


ChatGPT : 해당 프로그램에 알맞는 GUI 코드를 만들어주기 위해서는 파이썬에서 사용하는 GUI 라이브러리 중 하나인 Tkinter를 사용할 수 있습니다.
Tkinter를 이용하여 GUI를 만들기 위해서는 tkinter 모듈을 불러와야 합니다. 코드 상단에 다음과 같이 작성합니다.

     from tkinter import *

그 다음으로는 main() 함수를 만들어 GUI를 생성하고 프로그램을 실행하는 코드를 작성해야 합니다. 코드의 삽입 위치는 while 루프를 대체하는 것이 가장 적절합니다.

     def main():
             # Tk 객체 생성
             root = Tk()

                # 윈도우 제목 설정
              root.title("명사와 동사 선택기")

             # 윈도우 크기 설정
               root.geometry("400x200")

              # 레이블 생성
              label = Label(root, text="엔터를 누르면 문장이 만들어집니다", font=("Helvetica", 18))
             label.pack(pady=10)

              # 문장 생성 함수
             def create_sentence():
                   
# 파일에서 문자열 받아옴
                   
명사 = open("명사.txt", 'r')
                  명사묶음 = 명사.readlines()
                 명사.close()
                 동사 = open("동사.txt", 'r')
                   
동사묶음 = 동사.readlines()
                 동사.close()

              # 무작위로 선택하고 줄바꿈 소거 후 출력
              선택명사 = choice(명사묶음)
              선택명사 = 선택명사.strip()
             선택동사 = choice(동사묶음)
             선택동사 = 선택동사.strip()
             sentence_label.configure(text=선택명사 + "는 " + 선택동사)

     # 버튼 생성
     button = Button(root, text="문장 만들기", command=create_sentence, font=("Helvetica", 16))
     button.pack()

      # 문장 표시 레이블 생성
     sentence_label = Label(root, text="", font=("Helvetica", 18))
     sentence_label.pack(pady=20)

     # Tk 객체 실행
     oot.mainloop()

이제 프로그램을 실행하기 위해 if __name__ == "__main__": 코드 블록 안에서 main() 함수를 호출하도록 코드를 작성합니다.

     if __name__ == "__main__":
     main()

이렇게 작성된 코드는 create_sentence() 함수를 이용하여 임의의 명사와 동사를 선택하고 이를 이용하여 문장을 생성합니다. 이 문장은 GUI 창에 있는 sentence_label 레이블에 표시됩니다. 또한, 사용자가 문장 만들기 버튼을 클릭하면 create_sentence() 함수가 실행되어 새로운 문장이 생성됩니다.

 

 

ChatGPT가 만들어준 코드를 삽입해보자면 아래와 같다.

 

#random 모듈에서 choice 함수를 불러옴
from random import choice
from tkinter import *

#파일 모듈을 불러와 파일처리 함수를 실행
import 파일
파일.파일처리()

#while을 이용해 프로그램 계속 실행
a=0
def main():
         # Tk 객체 생성
         root = Tk()

         # 윈도우 제목 설정
         root.title("명사와 동사 선택기")

          # 윈도우 크기 설정
         root.geometry("400x200")

         # 레이블 생성
          label = Label(root, text="엔터를 누르면 문장이 만들어집니다", font=("Helvetica", 18))
         label.pack(pady=10)

         # 문장 생성 함수
          def create_sentence():
                 # 파일에서 문자열 받아옴
                 명사 = open("명사.txt", 'r')
                 명사묶음 = 명사.readlines()
                 명사.close()
                 동사 = open("동사.txt", 'r')
                 동사묶음 = 동사.readlines()
                 동사.close()

                 # 무작위로 선택하고 줄바꿈 소거 후 출력
                    선택명사 = choice(명사묶음)
                 선택명사 = 선택명사.strip()
                 선택동사 = choice(동사묶음)
                 선택동사 = 선택동사.strip()
                 sentence_label.configure(text=선택명사 + "는 " + 선택동사)

         # 버튼 생성
         button = Button(root, text="문장 만들기", command=create_sentence, font=("Helvetica", 16))
         button.pack()

         # 문장 표시 레이블 생성
         sentence_label = Label(root, text="", font=("Helvetica", 18))
         sentence_label.pack(pady=20)

         # Tk 객체 실행
         root.mainloop()

if __name__ == "__main__":
main()

 

위 코드의 문장-기계를 실행하면, 아래와 같은 창이 만들어진다. 엔터를 입력하라는 설명만 빼면 상당히 그럴듯하다.

 

 

그러나 조금 더 복잡한 제작을 전적으로 맡기기에는 아직 무리가 따르는 것 같다. 아래의 대화 내용을 따라가면 그 이유를 알 수 있다. 질문에 대한 답변을 무조건적으로 수용해 문장-기계를 만들어보려고 했지만, ChatGPT는 아직 조언자의 역할에 머무를 수밖에 없을 듯싶다. 사용자의 이해와 응용력이 뒷받침되지 않는 상태에서의 ChatGPT의 대답은 혼란을 더욱 가중시킬 뿐이었다.

 

 

이제 문장-기계 만들기를 멈출 때가 되었다. 이 이상 복잡하고 유용한 문장-기계는 ChatGPT라는 이미 완성된 것처럼 보이는 문장-기계와 함께 어렵지 않게 만들어 보기를 바란다. 물론, 아무도 안 만들고 있었을 것 같지만.

'101Hz | 무한구매일기' 카테고리의 다른 글

무한구매일기 1  (0) 2023.11.02
무한구매일기 0  (0) 2023.09.01
문장-기계 만들기 08  (0) 2022.09.01
문장-기계 만들기 07  (0) 2022.05.01
문장-기계 만들기 06  (0) 2022.04.01