使用Python-NLTK创建基本的硬编码聊天机器人
什么是聊天机器人?
近年来,聊天机器人越来越流行,用于自动化用户和软件平台之间的简单对话。聊天机器人能够响应用户输入并理解自然语言输入。Python-NLTK(自然语言工具包)是一个强大的库,可用于执行自然语言处理(NLP)任务。在本教程中,我们将使用Python-NLTK创建一个简单的硬编码聊天机器人。
聊天机器人创建的核心概念是什么?
聊天机器人创建的核心概念包括−
- 自然语言处理(NLP) − 聊天机器人使用NLP来理解人类语言并解释用户的意图。NLP涉及诸如分词,词性标注和命名实体识别之类的技术。
-
对话管理 − 对话管理负责管理对话的流程并在多轮对话之间保持上下文。
-
机器学习 − 机器学习用于训练聊天机器人识别数据模式,进行预测并随着时间的推移改进。聊天机器人开发中使用了监督学习,无监督学习和强化学习等技术。
-
API和集成 − 聊天机器人常常需要与外部服务和API集成,以提供信息或为用户完成任务。
-
用户体验(UX) − 用户体验对于聊天机器人至关重要,因为它们应该易于使用和直观。UX考虑包括设计对话流程,选择适当的响应类型以及为用户提供清晰和有用的反馈。
前提条件
在我们开始任务之前,您的系统上应安装以下内容−
建议的设置列表−
- pip install pandas, matplotlib
-
预期用户可以访问任何独立的IDE,例如VS-Code,PyCharm,Atom或Sublime文本。
-
甚至可以使用在线Python编译器,例如Kaggle.com,Google Cloud平台或其他任何编译器。
-
Python的最新版本。在撰写本文时,我使用了3.10.9版本。
-
对Jupyter笔记本的使用和了解。
-
对虚拟环境的知识和应用将是有益的,但不是必需的。
-
还应具有良好的统计和数学理解。
-
安装Python-NLTK(http://www.nltk.org/install.html)。
-
熟悉文本处理(分词,Lemma,词干提取)。
安装所需的库
首先,我们需要安装开发聊天机器人所需的库。聊天机器人开发需要NLTK、Regex、random和string库。要安装这些库,可以使用pip命令。
!pip install nltk
!pip install regex
!pip install random
!pip install string
导入所需的库
安装必要的库之后,我们需要在Python笔记本中导入这些库。以下是导入这些库的代码。
import nltk
import re
import random
import string
from string import punctuation
预处理数据
一旦安装和导入所需的软件包,我们需要预处理数据。预处理包括删除所有不必要的数据,将数据分词成句子并删除停止词。停止单词是在对话上下文中没有或几乎没有含义的最常见的单词,例如’a’,’is’等。
# 从nltk下载停用词
nltk.download('punkt')
nltk.download('stopwords')
stop_words = set(nltk.corpus.stopwords.words('english'))
def sentence_tokenizer(data):
# 句子分词函数
return nltk.sent_tokenize(data.lower())
def word_tokenizer(data):
# 单词分词函数
return nltk.word_tokenize(data.lower())
def remove_noise(word_tokens):
# 删除停用词和标点符号的函数
cleaned_tokens = []
for token in word_tokens:
if token not in stop_words and token not in punctuation:
cleaned_tokens.append(token)
return cleaned_tokens
构建聊天机器人
现在我们已经对数据进行了预处理,准备好构建聊天机器人了。聊天机器人的流程可以总结为以下步骤:
- 定义模式列表和响应
-
初始化一个无限循环
-
让用户输入一个查询
-
对查询进行分词并删除停用词
-
将查询与模式之一匹配并返回响应。
# 定义模式和响应
patterns = [
(r'hi|hello|hey', ['你好!', '你好!', '嘿!']),
(r'bye|goodbye', ['再见', '再见!']),
(r'(\w+)', ['是的,请继续', '告诉我更多', '我在听...']),
(r'(\?)', ['很抱歉,我无法回答', '请问我其他问题', '我不确定你的意思。'])
]
# 为用户输入生成响应的函数
def generate_response(user_input):
# 将用户输入附加到聊天记录中
conversation_history.append(user_input)
# 生成随机响应
response = random.choice(responses)
return response
# 聊天机器人的主循环
conversation_history = []
responses = [response for pattern, response in patterns]
while True:
# 用户输入
user_input = input("你: ")
# 如果用户说再见或再见,就结束循环
if user_input.lower() in ['bye', 'goodbye']:
print('聊天机器人: 再见!')
break
# 对用户输入进行分词
user_input_tokenized = word_tokenizer(user_input)
# 删除停用词
user_input_nostops = remove_noise(user_input_tokenized)
# 处理查询并生成响应
chatbot_response = generate_response(user_input_nostops)
# 打印响应
print('聊天机器人:', chatbot_response)
最终程序代码
import nltk
import re
import random
import string
from string import punctuation
# 从nltk下载停用词
nltk.download('punkt')
nltk.download('stopwords')
stop_words = set(nltk.corpus.stopwords.words('english'))
def sentence_tokenizer(data):
# 句子分词函数
return nltk.sent_tokenize(data.lower())
def word_tokenizer(data):
# 单词分词函数
return nltk.word_tokenize(data.lower())
def remove_noise(word_tokens):
# 删除停用词和标点符号的函数
cleaned_tokens = []
for token in word_tokens:
if token not in stop_words and token not in punctuation:
cleaned_tokens.append(token)
return cleaned_tokens
# 定义模式和响应
patterns = [
(r'hi|hello|hey', ['你好!', '你好!', '嘿!']),
(r'bye|goodbye', ['再见', '再见!']),
(r'(\w+)', ['是的,请继续', '告诉我更多', '我在听...']),
(r'(\?)', ['很抱歉,我无法回答', '请问我其他问题', '我不确定你的意思。'])
]
# 为用户输入生成响应的函数
def generate_response(user_input):
# 将用户输入附加到聊天记录中
conversation_history.append(user_input)
# 生成随机响应
response = random.choice(responses)
return response
# 聊天机器人的主循环
conversation_history = []
responses = [response for pattern, response in patterns]
while True:
# 用户输入
user_input = input("你: ")
# 如果用户说再见或再见,就结束循环
if user_input.lower() in ['bye', 'goodbye']:
print('聊天机器人: 再见!')
break
# 对用户输入进行分词
user_input_tokenized = word_tokenizer(user_input)
# 删除停用词
user_input_nostops = remove_noise(user_input_tokenized)
# 处理查询并生成响应
chatbot_response = generate_response(user_input_nostops)
# 打印响应
print('聊天机器人:', chatbot_response)
输出
在本节中,我们可以看到代码的输出: 用户输入 −
用户需要输入一个字符串,例如欢迎消息或问候语,聊天机器人将根据输入做出相应的回应。
根据回应,聊天机器人将创建回应。
当用户在输入部分写bye时,聊天机器人结束聊天。
结论
在本教程中,我们学习了如何使用Python-NLTK库创建一个简单的硬编码聊天机器人,并且对每个子部分都有示例。此聊天机器人可以对用户输入作出预定义的回应。我们还学习了句子分词,单词分词,删除停用词和模式匹配。这些技术将有助于构建更复杂的聊天机器人。