我需要扫描文档并检查其中是否包含特定数据。 简而言之,假设我需要查找扫描的发票是否包含特定地址。
要给定的搜索地址与文档中的写法可以用不同的方式来写,例如:
要搜索的地址(意大利地址):“都灵(TO)的圣塔丽塔广场30号10390
扫描文档中的地址可能类似于: “都灵,都灵P.zza S.Rita 43,10390,都灵” 要么 “披萨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找到的文本中查找问题,但是即使您有建议以其他语言/平台实现此建议,也可以作为参考。
答案 0 :(得分: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")