import tkinter as tk
import pyttsx3
import difflib
import xlrd
# 初始化语音合成引擎
engine = pyttsx3.init()
# 读取 Excel 数据
workbook = xlrd.open_workbook('data.xls')#Question
sheet = workbook.sheet_by_index(0)
data = {sheet.cell_value(i, 0): sheet.cell_value(i, 1) for i in range(1, sheet.nrows)}
def get_closest_answer(keyword):#Answer
# 在问题列表中找到包含关键词的问题
closest_question = difflib.get_close_matches(keyword.lower(), data.keys(), n=1, cutoff=0.3)
if closest_question:
closest_question = closest_question[0]
# 获取对应的答案
return data[closest_question]
else:
return "I'm sorry, I don't understand."
def auto_reply(*args):
user_input = input_entry.get()
answer = get_closest_answer(user_input)
output_label.config(text=answer)
# 使用语音合成播报回复内容
engine.say(answer)
engine.runAndWait()
# 清空输入框内容
input_entry.delete(0, tk.END)
def copy_answer():
root.clipboard_clear()
root.clipboard_append(output_label.cget("text"))
root.update()
root = tk.Tk()
root.title("自动回复")
canvas = tk.Canvas(root, width=600, height=300, bg='white')
canvas.pack()
input_label = tk.Label(root, text="Input:")
input_label.place(x=50, y=50)
input_entry = tk.Entry(root)
input_entry.place(x=100, y=50)
output_label = tk.Label(root, text="")
output_label.place(x=50, y=100)
reply_button = tk.Button(root, text="Reply", command=auto_reply)
reply_button.place(x=250, y=50)
copy_button = tk.Button(root, text="Copy Answer", command=copy_answer)
copy_button.place(x=350, y=95)
# 绑定回车键到自动回复函数
root.bind('<Return>', auto_reply)
root.mainloop()
import random
import pyttsx3
engine = pyttsx3.init() # 初始化语音引擎
def say(text):
"""将文本转换为语音输出"""
engine.say(text)
engine.runAndWait()
def get_response(input_text):
"""根据输入文本返回回复"""
responses = [
"你好啊!",
"我不清楚,请再说一遍。",
"你能具体说一下吗?",
"很高兴和你交流!",
"对不起,我还无法理解你的意思。",
"这个问题有点难,我需要更多时间来思考。",
"谢谢你和我聊天!",
"我觉得你说的很有道理。",
"你的意见很重要,我会认真考虑的。",
"抱歉,我不能做到这个。"
]
return random.choice(responses)
say("你好,我是小爱同学。请问有什么可以帮助你的吗?")
while True:
user_input = input()
say(user_input) # 输出语音
if user_input.lower() == "再见":
say("再见!祝你过得愉快。")
break
else:
response = get_response(user_input)
say(response) # 输出语音
import difflib
import xlrd
# 读取 Excel 数据
workbook = xlrd.open_workbook('data.xls')
sheet = workbook.sheet_by_index(0)
data = {sheet.cell_value(i, 0): sheet.cell_value(i, 1) for i in range(1, sheet.nrows)}
def get_closest_answer(keyword):
# 在问题列表中找到包含关键词的问题
closest_question = difflib.get_close_matches(keyword.lower(), data.keys(), n=1, cutoff=0.3)
if closest_question:
closest_question = closest_question[0]
# 获取对应的答案
return data[closest_question]
else:
return "I'm sorry, I don't understand."
# 测试程序
keyword = "衣服"
answer = get_closest_answer(keyword)
print(answer)
import tkinter as tk
import pyttsx3
import difflib
import xlrd
import os
# 初始化语音合成引擎
engine = pyttsx3.init()
# 读取 Excel 数据
data = {}
for filename in os.listdir('.'):
if filename.endswith('.xls'):
workbook = xlrd.open_workbook(filename)
sheet = workbook.sheet_by_index(0)
data.update({sheet.cell_value(i, 0): sheet.cell_value(i, 1) for i in range(1, sheet.nrows)})
last_answer = ""
def get_closest_answer(keyword):
# 在问题列表中找到包含关键词的问题
closest_question = difflib.get_close_matches(keyword.lower(), data.keys(), n=1, cutoff=0.3)
if closest_question:
closest_question = closest_question[0]
# 获取对应的答案
return data[closest_question]
else:
return "I'm sorry, I don't understand."
def speak_answer():
global last_answer
# 使用语音合成播报最后一个答案
engine.say(last_answer)
engine.runAndWait()
def auto_reply(*args):
global last_answer
user_input = input_entry.get()
answer = get_closest_answer(user_input)
output_label.config(text=answer)
# 将答案存储到全局变量中
last_answer = answer
# 清空输入框内容
input_entry.delete(0, tk.END)
def copy_answer():
root.clipboard_clear()
root.clipboard_append(output_label.cget("text"))
root.update()
root = tk.Tk()
root.title("自动回复")
canvas = tk.Canvas(root, width=600, height=300, bg='white')
canvas.pack()
input_label = tk.Label(root, text="Input:")
input_label.place(x=50, y=50)
input_entry = tk.Entry(root)
input_entry.place(x=100, y=50)
output_label = tk.Label(root, text="", wraplength=280)
output_label.place(x=50, y=100)
reply_button = tk.Button(root, text="发送", command=auto_reply)
reply_button.place(x=250, y=50)
copy_button = tk.Button(root, text="Copy复制", command=copy_answer)
copy_button.place(x=350, y=95)
speak_button = tk.Button(root, text="语音播报", command=speak_answer)
speak_button.place(x=350, y=145)
# 绑定回车键到自动回复函数
root.bind('<Return>', auto_reply)
root.mainloop()
#在上面的代码中,我添加了一个新的“语音播报”按钮(speak_button)。在get_closest_answer()函数中,我将答案字符串存储到last_answer全局变量中。在speak_answer()函数中,我使用pyttsx3库播放last_answer全局变量中存储的答案字符串。最后,在auto_reply()函数中,我使用global关键字声明last_answer变量为全局变量,并将获取到的答案存储到该变量中。这样,用户每次获取答案时都会将其保存到last_answer全局变量中,然后可以手动单击“语音播报”按钮来朗读上一次获取的答案。
加入下拉条,内容过多时自动下移并实现打字效果
import tkinter as tk
import pyttsx3
import difflib
import xlrd
import time
import os
from tkinter.scrolledtext import ScrolledText
# 初始化语音合成引擎
engine = pyttsx3.init()
# 读取 Excel 数据
data = {}
for filename in os.listdir('.'):
if filename.endswith('.xls'):
workbook = xlrd.open_workbook(filename)
sheet = workbook.sheet_by_index(0)
data.update({sheet.cell_value(i, 0): sheet.cell_value(i, 1) for i in range(1, sheet.nrows)})
last_answer = ""
def get_closest_answer(keyword):
# 在问题列表中找到包含关键词的问题
closest_question = difflib.get_close_matches(keyword.lower(), data.keys(), n=1, cutoff=0.3)
if closest_question:
closest_question = closest_question[0]
# 获取对应的答案
return data[closest_question]
else:
return "I'm sorry, I don't understand."
def speak_answer():
global last_answer
# 使用语音合成播报最后一个答案
engine.say(last_answer)
engine.runAndWait()
def auto_reply(*args):
global last_answer
user_input = input_entry.get()
answer = get_closest_answer(user_input)
output_label.delete(1.0, tk.END)
last_answer = answer
for char in answer:
output_label.insert(tk.END, char)
output_label.update()
time.sleep(0.1) # 控制回答的速度
# 清空输入框内容
input_entry.delete(0, tk.END)
def copy_answer():
root.clipboard_clear()
root.clipboard_append(output_label.get(1.0, tk.END))
root.update()
root = tk.Tk()
root.title("自动回复")
root.geometry('650x500')
# canvas = tk.Canvas(root, width=650, height=500, bg='white')
# canvas.pack()
input_label = tk.Label(root, text="Input:")
input_label.place(x=50, y=450)
input_entry = tk.Entry(root)
input_entry.place(x=100, y=450)
output_label = ScrolledText(root, width=67, height=30, wrap=tk.WORD)
output_label.place(x=50, y=10)
reply_button = tk.Button(root, text="发送", command=auto_reply)
reply_button.place(x=250, y=450)
copy_button = tk.Button(root, text="Copy复制", command=copy_answer)
copy_button.place(x=550, y=295)
speak_button = tk.Button(root, text="语音播报", command=speak_answer)
speak_button.place(x=550, y=345)
# 绑定回车键到自动回复函数
root.bind('<Return>', auto_reply)
root.mainloop()
# 使用output_label.see(tk.END)方法来将滚动条自动下移至文本框底部