使用 OCR 识别双精度数或 S 中的数字 5

Recognising number 5 in a double or an S when using OCR

我正在构建的收据阅读应用程序上使用 OCR。可以理解的是,OCR 在 S 和 5 之间存在差异。

我的应用在餐馆收据中找到通常格式如下的每一行:

 1 Champagne             £505.55
 5 Burger with chips     £25.00
 2 Chips with cheese     £5.00
 2 Coke                  £1.50
 1 Ketchup               £0.50   
 5 Penny sweets          £0.05

目前我可以很好地找到 Int 和文本,我也可以在末尾找到 double,但如果它包含 5,则很少见。是否有一些正则表达式可以通过查看周围环境来确定 5 是否已被替换?我现在只能通过识别货币符号并替换之后的任何事件来假设吗?但有时它很难识别那些或者没有。任何建议或帮助都会很棒。谢谢

编辑:我知道可能没有完美的答案来获得像 555.55 英镑这样显示为 SSS.SS 的艰难价格,但如果有更常见的价格,如 0.50、10.50 或 5.00 等,我喜欢听取一些建议。再次感谢

更新:

mutating func replaceWhereFivesShouldBe() {

    do {

        let regEx = try! NSRegularExpression(pattern: "\s+[0-9S]+\.[0-9S]{2}")
        let range = NSMakeRange(0, self.characters.count)
        self = regEx.stringByReplacingMatches(in: self, range: range, withTemplate: "5")
    } catch {

        return
    }

}

使用正则表达式匹配行中 £ 之后的任何文本,并将所有 "S" 个字符替换为“5”。这假设您在货币符号后只会有非字母字符(特别是没有 S 字符)。这个正则表达式应该有效:

£[0-9S]+\.[0-9S]{2}

从那里找到 S 字符的索引并将其替换为 5。

如果货币符号不存在(或未检测到),只需使用正则表达式来识别货币金额就可以了。根据您的示例,我不希望在项目描述中找到该模式。像这样:

\s+[0-9S]+\.[0-9S]{2}

或者如果货币符号是乱码,通配符如下:

\s+.[0-9S]+\.[0-9S]{2}