You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python字典实现多关键词用户输入识别?

完善现有质数匹配方案

你的代码目前只判断整个输入是否是单个关键词,要处理长输入,得先把输入拆成单个单词,再逐个匹配关键词,最后把匹配到的值相乘。修改后的代码如下:

keywords = {"open": 2,
            "close": 3,
            "door" : 5,
            "don't": -1}
# 把输入转小写并拆成单词列表
input_words = input("/ ").lower().split()
product = 1
found_keyword = False

# 遍历每个单词,匹配关键词并计算乘积
for word in input_words:
    if word in keywords:
        product *= keywords[word]
        found_keyword = True

# 有匹配才输出乘积,否则提示无匹配
if found_keyword:
    print(product)
else:
    print("没找到任何关键词")

测试效果:

  • 输入please open the door for me,会提取open和door,输出10
  • 输入don't close door,提取don't、close、door,输出-15

不过这个方案有几个局限:

  • 没法处理多词关键词(比如turn on这种短语)
  • 关键词多了之后,乘积会变得极大,虽然Python支持大整数,但可读性很差
  • 新增关键词时得找新的质数,比较麻烦
更优的实现方案

直接用集合存储匹配到的关键词,再根据关键词组合触发对应逻辑,比质数乘积更直观,也更容易维护。

基础版:直接判断关键词组合

# 定义所有关键词
all_keywords = {"open", "close", "door", "don't"}
input_words = input("/ ").lower().split()
# 收集匹配到的关键词
matched_keywords = set()
for word in input_words:
    if word in all_keywords:
        matched_keywords.add(word)

# 根据匹配的组合执行逻辑
if matched_keywords == {"open", "door"}:
    print("执行开门操作")
elif matched_keywords == {"close", "door"}:
    print("执行关门操作")
elif "don't" in matched_keywords and "open" in matched_keywords and "door" in matched_keywords:
    print("拒绝执行开门操作")
else:
    print("无对应操作")

进阶版:用字典映射组合到动作

如果关键词组合多了,用if-elif会太繁琐,可以直接把组合和对应的动作存在字典里:

# 定义关键词组合和对应动作(用frozenset是因为集合不能当字典键)
combo_actions = {
    frozenset({"open", "door"}): "执行开门",
    frozenset({"close", "door"}): "执行关门",
    frozenset({"don't", "open", "door"}): "拒绝开门"
}
# 提取所有关键词,方便快速匹配
all_keywords = {kw for combo in combo_actions.keys() for kw in combo}

input_words = input("/ ").lower().split()
matched_keywords = set()
for word in input_words:
    if word in all_keywords:
        matched_keywords.add(word)

# 查找对应的动作
for combo, action in combo_actions.items():
    # 这里用issubset表示只要包含组合里的关键词就触发,也可以用==要求完全匹配
    if combo.issubset(matched_keywords):
        print(action)
        break
else:
    print("未匹配到有效操作")

支持多词关键词

如果需要处理turn on这种多词关键词,可以检查连续的单词组合:

all_keywords = {"open", "close", "door", "don't", "turn on"}
input_words = input("/ ").lower().split()
matched_keywords = set()

# 先匹配单个单词
for word in input_words:
    if word in all_keywords:
        matched_keywords.add(word)

# 再匹配双词组合
for i in range(len(input_words) - 1):
    two_word_phrase = " ".join(input_words[i:i+2])
    if two_word_phrase in all_keywords:
        matched_keywords.add(two_word_phrase)
        # 移除单个单词的匹配,避免重复计数(可选)
        if input_words[i] in matched_keywords:
            matched_keywords.remove(input_words[i])
        if input_words[i+1] in matched_keywords:
            matched_keywords.remove(input_words[i+1])

print("匹配到的关键词:", matched_keywords)

内容的提问来源于stack exchange,提问作者user22309639

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:41:01