0

我需要扫描文档并检查它是否包含特定数据。简单地说,假设我需要查找扫描的发票是否包含特定地址。

与在文档中的写入方式相比,要搜索的给定地址可以以不同的方式写入,例如:

搜索地址(意大利地址):“Piazza Santa Rita 43, 10390, Torino(TO)

扫描文档中的地址可以是:“Torino, P.zza S.Rita 43, 10390, Torino”或“Pizza S.Rita 43, 10390, Torino”等

我正在寻找一种方法来在要搜索的数据之间找到一种“相似性”,这样如果我找到一个接近 80% 的文本,我认为它是一个有效的文档

除了地址的输入方式之外,另一个问题是扫描的文档可能(大部分时间会)质量很差,因此 OCR 引擎可能会误解某些字符,从而产生不好的结果(比如“c”变成了一个'o',一个'3'变成了'B',等等......所以我也想考虑到这一点

例如,扫描的文档可能会导致“Plzza S.Rita 4B, 1O390, Tcrinc”

关于如何解决这个问题的任何建议?

实际上我正在Android上开发这个,使用OpenCV去歪斜文档图片和Google Firebase ML-KIT在设备上扫描文档(我不能依赖外部服务,我必须在设备上解决它)所以我应该解决这使用 Java 并从 ml-kit ocr 找到的文本中查看,但即使您有在其他语言/平台中实现它的建议也可以作为参考。

4

1 回答 1

0

这确实是一个有点难的问题。我相信你最好的选择是模糊字符串匹配。
有一些 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")
于 2018-08-31T22:27:41.263 回答