我正在编写一个Ruby应用程序,该应用程序从杂货店收据中读取文本,并允许用户查看他们每盎司支付的金额以及可能基于成分的服务。我正在使用非常直接的Tesseract宝石。然而,这些行项目经常是错误的,有时是滑稽的,就像“卷曲欧芹”的“魁梧的欧芹”一样。
我认为解决这个问题在某种程度上是一个自然的语言处理问题,但我目前还没有背景知道要进入的方向。我的第一个想法是破解他人的想法,提出Google请求如果他们提出不同的建议,请使用它。但是,我想阅读并了解如何正确解决这个问题。
那我该如何解决我魁梧的欧芹问题?
答案 0 :(得分:1)
有很多方法可以解决这样的问题。这是我头脑中的一个:
字典 - 如果您在这种情况下将自己限制在纵向 - 零售 - 应该可以构建一个您可能遇到的所有可能项目的字典。然后,您可以使用某种形式的字符串相似性/匹配,将OCR读取的结果与字典中的单词进行比较。我刚才在这个主题上写了an article,涵盖了近似的字符串匹配技术。它有点陈旧但仍然相关,因为它只涵盖了基础知识。
如果您遇到字典中不存在的项目,并且没有合理的大概匹配那里的任何项目(也就是全新的项目),您可以暂时将其视为新项目用于此目的当前案件,并将其标记为审查。您以后的评论可以决定它是一个新项目,还是一个非常糟糕的阅读。在第一种情况下,您将其添加到字典中,然后在第二种情况下将其映射到原始项目。
您还可以创建将变体映射到原始项目的数据结构。例如,让我们来看看"魁梧的欧芹"案件。这将在上面概述的步骤1中找到,以匹配"卷曲的欧芹"。通常,进行一堆字符串近似比较是昂贵的。为了节省您下次遇到它的时间,您可以添加"魁梧的欧芹"到您的项目的已知变体列表。
下次你遇到"魁梧的欧芹"你会把它看作是卷曲欧芹的变种"然后选择那个而不必花时间再做比较。