【发布时间】:2018-08-31 10:05:50
【问题描述】:
我需要扫描文档并检查它是否包含特定数据。 简单地说,假设我需要查找扫描的发票是否包含特定地址。
与在文档中的写入方式相比,要搜索的给定地址可以以不同的方式写入,例如:
要搜索的地址(意大利地址):“Piazza Santa Rita 43, 10390, Torino(TO)
扫描文档中的地址可能如下: "都灵, P.zza S.Rita 43, 10390, 都灵" 要么 “Pizza S.Rita 43, 10390, 都灵” 等等
我正在寻找一种方法来在要搜索的数据之间找到一种“相似性”,这样如果我找到接近 80% 的文本,我就会认为它是有效文档
除了地址的输入方式之外,另一个问题是扫描的文档可能(大部分时间会)质量很差,因此 OCR 引擎可能会误解某些字符,从而产生不好的结果(如 ' c'变成了'o','3'变成了'B',等等......所以我也想考虑到这一点
例如扫描的文档可能会导致“Plzza S.Rita 4B, 1O390, Tcrinc”
关于如何解决这个问题的任何建议?
实际上我是在 Android 上开发的,使用 OpenCV 去歪斜文档图片和 Google Firebase ML-KIT 扫描设备上的文档(我不能依赖外部服务,我必须在设备上解决它)所以我应该使用 Java 来解决这个问题,并从 ml-kit ocr 找到的文本中查看,但即使您有在其他语言/平台上实现此功能的建议也可以作为参考。
【问题讨论】:
-
您可以使用正则表达式轻松执行这种字符串匹配。
-
我认为你低估了这个问题,这不是纯粹的字符串匹配,而是字符串相似性,除了词序之外,你还必须考虑错误的扫描字符会导致误报。我想我应该使用像en.wikipedia.org/wiki/Levenshtein_distance 这样的混合算法
-
为什么你认为正则表达式对你不起作用?它们通常用于解决这类问题。
-
你能给我看一个在这种情况下正则表达式的例子吗?
-
这个答案对您有帮助吗?
标签: android firebase ocr string-matching firebase-mlkit