如何在Python字典中实现多关键词匹配的响应生成?
如何在Python字典中同时匹配多个关键词触发响应
需求是:当用户输入同时包含“generate”和“name”两个关键词时,触发对应的响应生成。你提供的原有代码将两个关键词拼接成了连续字符串"generatename",只能匹配输入中出现该连续字符串的情况,无法处理两个关键词分开出现的场景(比如“can you generate a name”)。
下面是修改后的实现方案,支持同时匹配多个关键词:
import random import datetime # 键为需要同时匹配的关键词元组,值为对应响应列表 keywords = { ("generate", "name"): ["Joe", "Bob", "Tim"], } def generate_response(user_input): input_lower = user_input.lower() for keyword_group, responses in keywords.items(): # 检查当前组内所有关键词是否都存在于输入中 if all(keyword in input_lower for keyword in keyword_group): return random.choice(responses) return "I'm sorry, I didn't understand what you said." def main(): print("Chatbot: Hi, I'm a Chatbot. How can I help you today?") while True: user_input = input("You: ") if user_input.lower() == "quit": break response = generate_response(user_input) print("Chatbot:", response) if __name__ == "__main__": main()
关键改动说明
- 调整字典结构:将字典的键从拼接字符串改为关键词元组,这样可以清晰定义需要同时匹配的多组关键词,后续扩展其他组合(比如同时匹配“tell”和“joke”)只需添加新的键值对即可。
- 修改匹配逻辑:使用
all()函数判断当前关键词组内的所有关键词是否都存在于用户输入中,确保只有当所有关键词都满足时才触发对应响应。 - 修复代码问题:补上了原代码中缺失的
datetime模块导入(原代码中声明了now变量但未使用,也可以直接删除该变量声明)。
如果需要支持更多关键词组合,只需扩展keywords字典:
keywords = { ("generate", "name"): ["Joe", "Bob", "Tim"], ("tell", "joke"): ["Why did the scarecrow win an award? Because he was outstanding in his field!", "What do you call fake spaghetti? An impasta!"] }
内容的提问来源于stack exchange,提问作者Ryan Cheung
相关产品推荐
相关产品推荐

