如何强制iOS Speech API只读数字并将“one”识别为“1”

时间:2017-06-11 22:50:13

标签: ios swift speech-to-text sfspeechrecognizer speech-recognition-api

我想使用 iOS Speech API 来识别数学表达式。它适用于像two plus four times three这样的东西 - 将其读作2+4*3,但当我用1开始表达时,它总是将其读作“一”。当“One”处于表达式的中间时,它按预期工作。

我发现当我在显示实时结果时将SFSpeechAudioBufferRecognitionRequest属性taskHint设置为.search时,它首先将1正确识别为“1”,但最后将其更改为“1” “

有没有办法将其配置为仅识别数字? 或者只是强制将“One”读作“1”? 或者解决它的唯一方法是自己格式化结果字符串?

1 个答案:

答案 0 :(得分:1)

我也有同样的问题,但似乎无法配置它。 我为代码编写了此扩展程序,正在对此进行检查。

extension String {

    var numericValue: NSNumber? {

        //init number formater
        let numberFormater = NumberFormatter()

        //check if string is numeric
        numberFormater.numberStyle = .decimal

        guard let number = numberFormater.number(from: self.lowercased()) else {

            //check if string is spelled number
            numberFormater.numberStyle = .spellOut

            //change language to spanish
            //numberFormater.locale = Locale(identifier: "es")

            return numberFormater.number(from: self.lowercased())
        }

        // return converted numeric value
        return number
    }
}

例如

{

    let numString = "1.5"
    let number = numString.numericValue //1.5
    // or 
    let numString = "Seven"
    let number = numString.numericValue //7

}