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

谷歌语音识别说'crimson'误触发'on'的Python智能灯语音控制问题问询

问题根因

你当前使用in做子串匹配,只要查询文本中包含对应字符序列就会触发逻辑,不会区分是否为独立的指令单词,因此crimson末尾的on字符序列会被误判为开灯指令。

可行解决方案

方法1:拆分独立单词匹配(最推荐)

先把用户查询拆分为独立的单词列表,再判断指令是否作为独立单词存在,从根源避免子串误匹配:

import re
elif ('light' in query) or ('lights' in query):  # 家庭自动化
    # 预处理:提取查询中所有独立单词,统一转小写,自动过滤标点
    words = re.findall(r'\b\w+\b', query.lower())
    if 'on' in words:
        control_lights("light on")
        speak("okay, turning on light")
    if 'off' in words:
        control_lights("light off")
        speak("okay, turning off light")
    if 'crimson' in words:
        control_lights("light crimson")
        speak("okay, turning light to crimson")

方法2:正则单词边界匹配

如果不想改动太多原有逻辑,可以用正则的\b单词边界符做匹配,只有当on作为独立单词出现时才触发:

import re
elif ('light' in query) or ('lights' in query):  # 家庭自动化
    if re.search(r'\bon\b', query, re.IGNORECASE):
        control_lights("light on")
        speak("okay, turning on light")
    if re.search(r'\boff\b', query, re.IGNORECASE):
        control_lights("light off")
        speak("okay, turning off light")
    if 'crimson' in query:
        control_lights("light crimson")
        speak("okay, turning light to crimson")

方法3:调整判断优先级(临时兼容方案)

如果暂时不想引入正则,可以把更长的、可能包含短指令的判断放在最前面,匹配后直接跳过后续通用指令判断:

elif ('light' in query) or ('lights' in query):  # 家庭自动化
    has_color_command = False
    if 'crimson' in query:
        control_lights("light crimson")
        speak("okay, turning light to crimson")
        has_color_command = True
    # 只有没匹配到颜色指令时,才判断开关指令
    if not has_color_command:
        if 'on' in query:
            control_lights("light on")
            speak("okay, turning on light")
        if 'off' in query:
            control_lights("light off")
            speak("okay, turning off light")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:27:04