Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从语音到文本的数学评价_Ios_Swift_Speech Recognition - Fatal编程技术网

Ios 从语音到文本的数学评价

Ios 从语音到文本的数学评价,ios,swift,speech-recognition,Ios,Swift,Speech Recognition,我正在使用iOS语音API 我正在尝试做一些关于语音到文本框架输出的数学计算 有几个问题。。首先,用户可能会说一些愚蠢的话,所以我们必须检查它是单词还是数学表达式。所以我想我们可以用这样的方法: if string.contains("×") || string.contains("+") || string.contains("-") 但它看起来很糟糕,如果用户说例如“+2”,该怎么办 然后我想,也许我们可以检查输入是否为Int,所以我想: guard let stringResult =

我正在使用iOS语音API

我正在尝试做一些关于语音到文本框架输出的数学计算

有几个问题。。首先,用户可能会说一些愚蠢的话,所以我们必须检查它是单词还是数学表达式。所以我想我们可以用这样的方法:

if string.contains("×") || string.contains("+") || string.contains("-")
但它看起来很糟糕,如果用户说例如
“+2”
,该怎么办

然后我想,也许我们可以检查输入是否为Int,所以我想:

guard let stringResult = result?.bestTranscription.formattedString else {
                return
        }

let convertedNumber = Int(stringResult)

if let stringResult = convertedNumber {
            print(stringResult)
            print("Everything works Fine")
        } else {
                print("nope..")                    
        }
而且它一直在失败

我尝试了几种更奇怪的方法来解决这个错误处理,但我没有任何其他想法

输入,作为startRecording函数的一部分:

if result != nil {
            guard let stringResult = result?.bestTranscription.formattedString else {
                return
            }
            self.inputLabel.text = stringResult
然后计算看起来完全错误的函数:

private func calculate(string: String) {
    if string.contains("×") || string.contains("+") || string.contains("-") {
        let stringToCalculate = string.replacingOccurrences(of: "×", with: "*")
        guard let finalScore = NSExpression(format: stringToCalculate).expressionValue(with: nil, context: nil) else { return }
        outputLabel.text = String(describing: finalScore)
    } else {
        outputLabel.text = "Are you sure it's mathematical evaluation ?"
    }
}
好的输入示例:7+7x2->21

坏:“海盗在喝朗姆酒!”或“海盗”->outputLabel.text=“你确定这是数学评估吗?”


因此,问题是我应该如何处理错误,以了解输入是数学计算,并对其进行数学计算,而不是单词/单词?

自然语言解析是一项复杂的任务,当然可以通过简单的子字符串匹配,甚至是正则表达式来完成,但是现在有更先进的算法,它们使用机器学习来分类更复杂的情况。这样的系统是基于范例的,这意味着您可以向他们提交示例,他们将从中学习如何正确地识别意图。这种基于示例的系统可以解析“将结果乘以三”之类的内容,并理解“结果”是前面的结果,您需要将其乘以。它们还为您提供解析信心

例如,您可以基于SPACY检查此类工具,还有来自Microsoft的LIUS等服务

在iOS上运行这样的工具并不容易,您可能希望通过RESTAPI在服务器上运行它们。但编译MITIE在理论上是可能的

另见

相关