2017-07-16 29 views
0

我正在使用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..")      
     } 

,并不停地进行故障..

我tryed几个奇怪的方法来解决这个错误处理,但我不”没有其他的想法。

输入,作为一块的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×2 - > 21

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

所以问题是我应该如何处理错误,以获知输入是数学评估,并对其进行数学计算,而不是单词/单词?

+0

相关信息请参见https://stackoverflow.com/questions/44253194/parse-speech-output-to-a-json-to-call-application- API/44257741#44257741 –

回答

1

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

例如,您可以根据SPACY和MITIE来检查RASA NLU这样的工具,还有像微软的LIUS这样的服务。

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

How to proceed with NLP task for recognizing intent and slots

Converting natural language to a math equation