【问题标题】:Recognising number 5 in a double or an S when using OCR使用 OCR 时识别双精度或 S 中的数字 5
【发布时间】:2017-03-17 13:57:29
【问题描述】:

我正在构建的收据阅读应用程序上使用 OCR。可以理解的是,S 和 5 之间的 OCR 斗争有所不同。

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

 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 和文本,我也可以在最后得到双精度,但如果它包含一个 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
    }

}

【问题讨论】:

    标签: ios regex swift ocr


    【解决方案1】:

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

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

    从那里,找到您的 S 字符的索引并将它们替换为 5。

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

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

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

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

    【讨论】:

    • 很好,谢谢,我意识到如果我检测到由换行符分隔的字符串中的每一组字符,价格将始终位于每行的最后一组,那么我可以使用你的第二个正则表达式如果 S 出现,请自信地替换它。谢谢!
    • 对于任何其他寻找 swift 语法的人需要 \\ 而不是 \
    • 正确 - 您需要转义转义字符才能正确转义句点。
    • 嗨@Samive 刚刚尝试使用您的第二个正则表达式示例作为字符串的扩展(请参阅我的问题中的更新),但它没有替换字符串中出现的任何“S”?我错过了什么吗?它收到的字符串是 505.50 英镑,在 ocr 之后以 ES05.50 出现。我的输出每次都是 5.50?
    • 嗨,韦恩,我建议使用正则表达式来识别您需要检查的字符串。确定需要替换的 S 字符后,您可以按照此处所述替换它们:stackoverflow.com/questions/24789515/…
    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 2015-10-21
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多