【问题标题】:How to check if a scanned document contains an address如何检查扫描的文档是否包含地址
【发布时间】: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


【解决方案1】:

这确实是一个有点难的问题。我相信您最好的选择是模糊字符串匹配。
有一些 Java 库应该对您有所帮助,例如JavaWuzzy.

extractX 和 sortX 等函数应该派上用场:

FuzzySearch.extractOne("cowboys", ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"])
(string: Dallas Cowboys, score: 90, index: 3)
FuzzySearch.tokenSortPartialRatio("order words out of","  words out of order")

【讨论】:

  • 下周我会回来写代码,我会试着让你知道这个库是否可以方便使用,谢谢
猜你喜欢
  • 1970-01-01
  • 2013-06-21
  • 2015-10-12
  • 1970-01-01
  • 2014-07-25
  • 2012-05-24
  • 1970-01-01
  • 2011-01-25
  • 2016-11-24
相关资源
最近更新 更多