基于python的简单对话系统

1.可以实现用户输入文字进行自然语言对话,具有多轮对话和基本的 UI 界面

2.该系统使用了自然语言处理(NLP)技术和基础知识库来帮助系统理解用户的请求,并提供有意义和准确的回答。



#首先,我们需要安装必要的库,并导入所需的模块。

```python
import nltk
import random
import string

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

import tkinter as tk
from tkinter import *
```

#然后,我们定义一个基本的 UI 界面,用于用户输入和对话历史记录的显示。

```python
class ChatInterface(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        self.initial_ui()

    def initial_ui(self):
        self.master.title("AI Chatbot")
        self.grid()

        self.chat_log = Text(self.master, bd=0, bg="white", height="8", width="50", font="Arial", wrap="word")
        self.chat_log.config(state=DISABLED)

        self.scrollbar = Scrollbar(self.master, command=self.chat_log.yview, cursor="heart")
        self.chat_log['yscrollcommand'] = self.scrollbar.set

        self.user_input = Text(self.master, bd=0, bg="white", width="29", font="Arial")
        self.user_input.bind("<Return>", self.send_text)

        self.send_button = Button(self.master, font="Arial", text="Send", width="12", height=5,
                                  bd=0, bg="#008CBA", activebackground="#00BFFF", fg='#ffffff',
                                  command=self.send_text)

        self.scrollbar.grid(row=0, column=1, sticky='ns')
        self.chat_log.grid(row=0, column=0, sticky="nsew", padx=2, pady=2)
        self.user_input.grid(row=1, column=0, padx=2, pady=2, sticky='we')
        self.send_button.grid(row=1, column=1, padx=2, pady=2, sticky='e')
```

#接下来,我们定义一个对话管理器,用于处理用户输入的文本,理解用户的意图,并根据需要返回适当的回答。

```python
class Chatbot:
    def __init__(self):
        self.greetings = ["hello", "hi", "hey", "howdy"]
        self.goodbyes = ["bye", "goodbye"]
        self.thanks = ["thank", "thanks"]
        self.knowledge_base = open('knowledge.txt', 'r').read().lower()
        self.sent_tokens = nltk.sent_tokenize(self.knowledge_base)
        self.word_tokens = nltk.word_tokenize(self.knowledge_base)
        self.remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)

    def chatbot_response(self, user_input):
        response = ''
        self.sent_tokens.append(user_input)
        TfidfVec = TfidfVectorizer(tokenizer=self.normalize, stop_words='english')
        tfidf = TfidfVec.fit_transform(self.sent_tokens)
        vals = cosine_similarity(tfidf[-1], tfidf)
        idx = vals.argsort()[0][-2]
        flat = vals.flatten()
        flat.sort()
        score = flat[-2]

        if score == 0:
            response = response + "I apologize, I don't understand."
            return response
        else:
            response = response + self.sent_tokens[idx]
            return response

    def normalize(self, text):
        return nltk.word_tokenize(text.lower().translate(self.remove_punct_dict))
```

#接下来,我们创建一个函数,该函数将读取用户输入的文本,使用 Chatbot 类处理该文本,并将回答输入到 UI 界面中。

```python
def get_input_output(chatbot, chat_log, input_text):
    chat_log.config(state=NORMAL)
    chat_log.insert(END, "You: " + input_text + '\n\n')
    chat_log.config(foreground="#442265", font=("Verdana", 12))

    if input_text.lower() in chatbot.goodbyes:
        chat_log.insert(END, "AI Chatbot: Bye! Goodbye and have a great day ahead!\n\n")
        chat_log.config(state=DISABLED)
        return

    if input_text.lower() in chatbot.thanks:
        chat_log.insert(END, "AI Chatbot: You're very welcome!\n\n")
        chat_log.config(state=DISABLED)
        return

    if input_text.lower() in chatbot.greetings:
        chat_log.insert(END, "AI Chatbot: Hello!\n\n")
        chat_log.config(state=DISABLED)
        return

    response = chatbot.chatbot_response(input_text)
    chat_log.insert(END, "AI Chatbot: " + response + '\n\n')
    chat_log.config(state=DISABLED)
```

#最后,我们实例化 Chatbot 类,并将 chat_interface 显示出来。

```python
chatbot = Chatbot()

root = Tk()
app = ChatInterface(master=root)
app.mainloop()
```



  在运行代码之前,请确保之前的所有步骤都已正确配置和安装,并在 working directory 中创建 knowledge.txt 文件,该文件包含一些简单的问答对,用于测试对话系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

并没要求有谁能体会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值