如何让iOS SFSpeechRecognizer支持药品名、化学术语等自定义词汇识别
SFSpeechRecognizer 自定义专有词汇识别方案
该需求可通过iOS系统公开API实现,无需依赖私有接口或越狱权限。
核心实现逻辑
SFSpeechRecognizer 原生提供了专有词汇注入能力,对应SFSpeechRecognitionRequest的contextualStrings属性,专门用于指定识别过程中需要优先匹配的自定义词条,可覆盖系统词典未收录的药品名称、化学专业术语、垂直领域专有名词等内容,识别引擎处理音频流时会提升列表内词汇的匹配权重,大幅降低专有词的识别错误率。
代码示例
import Speech // 初始化音频流识别请求 let request = SFSpeechAudioBufferRecognitionRequest() // 传入当前场景需要优先识别的自定义词汇 request.contextualStrings = [ "阿莫西林克拉维酸钾", "聚乙二醇化干扰素α-2b", "对乙酰氨基酚缓释片", "腺苷三磷酸", "甲基丙烯酸甲酯" ] // 后续按常规流程绑定音频输入、启动识别任务即可
使用注意事项
- 单次请求传入的
contextualStrings列表建议控制在100个词条以内,仅放入当前识别场景高频出现的专有词汇即可,塞入大量无关词汇会干扰识别模型判断,拉低整体识别准确率。 - 传入的词汇尽量使用完整的专有名词全称,避免传入单字、无意义的词语碎片,完整词条的识别优先级提升效果最明显。
- 该配置为单次识别请求维度生效,不会修改系统全局词典,也不会影响其他App的语音识别行为,每次发起新的识别任务都需要重新传入对应场景的专有词列表。
权限边界说明
如果需要实现跨App全局生效的自定义词汇识别,SFSpeechRecognizer没有开放对应修改权限,只能引导用户手动在系统「设置-通用-键盘-自定义短语」中添加对应词汇,系统语音识别模块会自动同步读取用户手动添加的自定义短语内容,但该操作必须由用户主动完成,App无权直接修改系统级自定义词典配置。
内容的提问来源于stack exchange,提问作者Bruno Coelho
相关产品推荐
相关产品推荐

