我正在努力将大量扫描文档数字化,使用Tesseract 3作为我的OCR引擎.其输出的质量是平庸的,因为它通常在实际文本之前和之后产生垃圾字符,并且在文本中产生拼写错误.
对于前一个问题,似乎必须有策略来确定哪些文本实际上是文本,哪些文本不是(大部分文本都是人的名字,所以我正在寻找除了查找单词之外的解决方案字典).
对于拼写错误的问题,大多数错误源于一些错误的字母分类(例如,替换l,1并且I相互替代),似乎应该有猜测哪些单词拼写错误的方法(因为没有太多的单词)英语中间有一个"1",并猜测适当的修正是什么.
这个领域的最佳实践是什么?是否存在执行此类操作的算法的免费/开源实现?谷歌已经收到了很多论文,但并没有太多具体内容.如果没有可用的实施,那么多篇论文中的哪一篇将是一个很好的起点?
我正在开展一个项目,该项目包含大量原始数据,其中聚合用于为面向公众的信息站点提供动力(一些简单的聚合,如各种总数和前十位总数,以及一些更多 - 复杂的聚合).目前,我们每隔几个月更新一次,包括添加新数据,可能更新或删除现有记录,以及重新运行所有离线聚合,然后将新聚合部署到生产中.
我们对增加更新频率感兴趣,因此从头开始重新聚合所有内容都不切实际,因此我们希望进行滚动聚合以更新现有聚合以反映新的,更改的或已删除的记录.
CouchDB的MapReduce实现提供了我正在寻找的大致设施:它将MapReduce任务的中间状态存储在一个大的B树中,其中地图的输出位于叶子处,并且reduce操作逐渐将分支连接在一起.新的,更新的或删除的记录会导致子树被标记为脏并重新计算,但只需要触摸reduce树的相关部分,并且可以按原样重复使用非脏子树的中间结果.
由于各种原因(虽然CouchDB的未来存在不确定性,缺乏对非MR一次性查询的便利支持,当前SQL大量实现等),我们不希望将CouchDB用于此项目,所以我我正在寻找这种树式增量map-reduce策略的其他实现(可能,但不一定,在Hadoop或类似的上面).
为了预先防止一些可能的反应:
我有一堆处理文档聚类的代码.一步涉及计算每个文档与给定语料库中的每个其他文档的相似性(对于"类似"的一些不重要的定义),并存储相似性以供以后使用.相似之处是不同的,我不关心具体的相似性是什么,我的分析的目的,只是它在什么桶.例如,如果文件15378和3278是52%相似,有序对(3278,15378)得到存储在[0.5,0.6]桶中.在初始分析之后,文档有时会在语料库中添加或删除,因此根据需要将相应的对添加到桶中或从桶中删除.
我正在研究存储这些ID对列表的策略.我们发现一个SQL数据库(这个项目的大多数其他数据都存在)对于我们的目的来说太慢而且磁盘空间太大,所以目前我们将每个存储桶存储为磁盘上的整数压缩列表(最初zlib压缩,但现在使用lz4代替速度).我喜欢这件事:
有点糟糕的事情:
那么:我应该关注哪种数据结构?我怀疑正确的答案是某种奇特的简洁数据结构,但这不是我所熟知的空间.此外,如果重要:所有文档ID都是无符号的32位整数,处理这些数据的当前代码是用C语言编写的,作为Python扩展,所以这可能是我们坚持的通用技术系列.
我有一个Web应用程序,其当前结构是使用backbone.js和客户端模板在浏览器中呈现所有内容,从Python驱动的JSON API中提取所有动态内容.有些应用程序足够内容,我不介意将其提供给谷歌和支持非JS客户端,所以我一直在考虑转向一个架构,其中第一个请求由一个节点应用程序处理,该应用程序呈现第一页并为其提供服务,在此之后,如果启用了JS以便在后续工作时提供后续请求,Backbone将接管客户端.
我知道有一些努力(比如开发种子的骨头)来实现这种策略,但是他们似乎期待一个应用程序在预先计划好时使用它们,无论是好还是坏,我的不是.
我正在寻找工具,库等,这将使这种过渡更容易.如果在非JS客户端的某些领域提供略有不同的体验,那么奖励点是可行的.思考?
aggregation ×1
algorithm ×1
backbone.js ×1
c ×1
hadoop ×1
integer ×1
mapreduce ×1
node.js ×1
ocr ×1
python ×1