【问题标题】:Math evaluation from speech to text从语音到文本的数学评估
【发布时间】:2017-12-21 02:18:56
【问题描述】:

我正在使用 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 + 7 x 2 -> 21

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

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

【问题讨论】:

标签: ios swift speech-recognition


【解决方案1】:

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

这种工具的例子你可以查看基于SPACY和MITIERASA NLU,还有微软的LIUS等服务。

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

另见

How to proceed with NLP task for recognizing intent and slots

Converting natural language to a math equation

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 2011-02-02
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多