我正在使用iOS Speech 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 + 7 x 2 - > 21
糟糕:“海盗正在喝朗姆酒!”或“海盗” - > outputLabel.text =“你确定这是数学评估吗?”
所以问题是我应该如何处理错误才能知道输入是数学评估并对其进行数学计算,而不是单词/单词?
答案 0 :(得分:1)
自然语言解析是一项复杂的任务,当然它可以通过简单的子串匹配甚至是正则表达式完成,但是现在有更多高级算法使用机器学习来分类更复杂的情况。这样的系统是基于示例的,这意味着您可以提交它们的示例,并且他们将学习如何正确地识别它们的意图。这种基于示例的系统可以解析诸如"将结果乘以三"并了解"结果"是以前的结果,你需要乘以它。它们还为您提供解析信心
例如,您可以根据SPACY和RASA NLU检查MITIE此类工具,还有来自Microsoft的LIUS等服务。
在iOS上运行此类工具并不容易,您可能希望通过REST API在服务器上运行它们。但编译MITIE在理论上是可行的。
另见
How to proceed with NLP task for recognizing intent and slots