[파이썬] nltk 대화형 챗봇 개발 기초

소개

이 블로그 포스트에서는 Python에서 Natural Language Toolkit (NLTK)를 사용하여 대화형 챗봇을 개발하는 기초를 살펴보겠습니다. NLTK는 자연어 처리 작업을 수행하기 위한 파이썬 라이브러리로, 토큰화, 형태소 분석, 품사 태깅 등의 기능을 제공합니다. 이러한 기능을 활용하여 챗봇을 만들 수 있습니다.

NLTK 설치

NLTK를 사용하기 위해서는 우선 NLTK를 설치해야 합니다. 다음 명령을 실행하여 NLTK를 설치합니다.

pip install nltk

대화 데이터 준비

챗봇을 개발하기 위해서는 대화 데이터가 필요합니다. 이 예제에서는 단순한 대화 형식의 텍스트 파일을 사용합니다. 예를 들어 다음과 같은 형식으로 데이터를 작성합니다.

user: 안녕
bot: 안녕! 무엇을 도와드릴까요?
user: 날씨 알려줘
bot: 지금은 맑은 날씨입니다.

데이터 전처리

NLTK를 사용하여 대화 데이터를 전처리해야 합니다. 이 단계에서는 대화를 문장으로 분리하고, 토큰으로 분리하여 처리할 수 있습니다. 또한 필요에 따라 불용어 (stopwords)를 제거하거나 형태소 분석을 수행할 수도 있습니다.

import nltk
from nltk.tokenize import word_tokenize, sent_tokenize

# 대화 데이터 로드
dialogue_data = open('dialogue.txt', 'r').read()

# 대화를 문장으로 분리
sentences = sent_tokenize(dialogue_data)

# 문장을 토큰으로 분리
tokens = [word_tokenize(sent) for sent in sentences]

# 불용어 제거 (선택적)
stopwords = ['무엇을', '어떻게', '합니다']
filtered_tokens = [[token for token in sent if token.lower() not in stopwords]
                   for sent in tokens]

# 형태소 분석 (선택적)
morphed_tokens = [nltk.pos_tag(sent) for sent in filtered_tokens]

챗봇 모델 개발

전처리된 데이터를 기반으로 챗봇 모델을 개발할 수 있습니다. 이 예제에서는 간단한 if-else 문을 사용하여 입력에 따라 적절한 응답을 생성하는 챗봇을 만들어 보겠습니다.

def chat_bot(input_text):
    if '안녕' in input_text:
        return "안녕하세요!"
    elif '날씨' in input_text:
        return "지금은 맑은 날씨입니다."
    else:
        return "죄송합니다. 이해할 수 없습니다."

# 챗봇 실행
while True:
    user_input = input("사용자: ")
    response = chat_bot(user_input)
    print("챗봇: ", response)

위의 코드를 실행하면 챗봇이 대화를 처리하고 적절한 응답을 생성하는 것을 확인할 수 있습니다.

결론

이제 NLTK를 사용하여 대화형 챗봇을 개발하는 기초를 알게 되었습니다. NLTK의 다양한 기능과 자연어 처리 알고리즘을 활용하여 더 복잡하고 유용한 챗봇을 개발할 수 있습니다. NLTK의 문서와 예제를 참고하여 더 많은 기능을 익혀보세요.