使用Python-NLTK创建基本的硬编码聊天机器人

使用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)

输出

在本节中,我们可以看到代码的输出: 用户输入 −

使用Python-NLTK创建基本的硬编码聊天机器人

用户需要输入一个字符串,例如欢迎消息或问候语,聊天机器人将根据输入做出相应的回应。

使用Python-NLTK创建基本的硬编码聊天机器人

根据回应,聊天机器人将创建回应。

使用Python-NLTK创建基本的硬编码聊天机器人

使用Python-NLTK创建基本的硬编码聊天机器人

使用Python-NLTK创建基本的硬编码聊天机器人

使用Python-NLTK创建基本的硬编码聊天机器人

当用户在输入部分写bye时,聊天机器人结束聊天。

结论

在本教程中,我们学习了如何使用Python-NLTK库创建一个简单的硬编码聊天机器人,并且对每个子部分都有示例。此聊天机器人可以对用户输入作出预定义的回应。我们还学习了句子分词,单词分词,删除停用词和模式匹配。这些技术将有助于构建更复杂的聊天机器人。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程