小编And*_*ton的帖子

OCR纠错算法

我正在努力将大量扫描文档数字化,使用Tesseract 3作为我的OCR引擎.其输出的质量是平庸的,因为它通常在实际文本之前和之后产生垃圾字符,并且在文本中产生拼写错误.

对于前一个问题,似乎必须有策略来确定哪些文本实际上是文本,哪些文本不是(大部分文本都是人的名字,所以我正在寻找除了查找单词之外的解决方案字典).

对于拼写错误的问题,大多数错误源于一些错误的字母分类(例如,替换l,1并且I相互替代),似乎应该有猜测哪些单词拼写错误的方法(因为没有太多的单词)英语中间有一个"1",并猜测适当的修正是什么.

这个领域的最佳实践是什么?是否存在执行此类操作的算法的免费/开源实现?谷歌已经收到了很多论文,但并没有太多具体内容.如果没有可用的实施,那么多篇论文中的哪一篇将是一个很好的起点?

algorithm ocr error-correction

21
推荐指数
2
解决办法
5502
查看次数

增量MapReduce实现(最好不是CouchDB)

我正在开展一个项目,该项目包含大量原始数据,其中聚合用于为面向公众的信息站点提供动力(一些简单的聚合,如各种总数和前十位总数,以及一些更多 - 复杂的聚合).目前,我们每隔几个月更新一次,包括添加新数据,可能更新或删除现有记录,以及重新运行所有离线聚合,然后将新聚合部署到生产中.

我们对增加更新频率感兴趣,因此从头开始重新聚合所有内容都不切实际,因此我们希望进行滚动聚合以更新现有聚合以反映新的,更改的或已删除的记录.

CouchDB的MapReduce实现提供了我正在寻找的大致设施:它将MapReduce任务的中间状态存储在一个大的B树中,其中地图的输出位于叶子处,并且reduce操作逐渐将分支连接在一起.新的,更新的或删除的记录会导致子树被标记为脏并重新计算,但只需要触摸reduce树的相关部分,并且可以按原样重复使用非脏子树的中间结果.

由于各种原因(虽然CouchDB的未来存在不确定性,缺乏对非MR一次性查询的便利支持,当前SQL大量实现等),我们不希望将CouchDB用于此项目,所以我我正在寻找这种树式增量map-reduce策略的其他实现(可能,但不一定,在Hadoop或类似的上面).

为了预先防止一些可能的反应:

  • 我知道MongoDB支持增量MapReduce; 在我看来,这不是真实的东西,因为它真的只适用于数据集的添加,而不是更新或删除.
  • 我也知道Incoop论文.这完全描述了我想要的东西,但我认为他们没有公开他们的实现.

hadoop mapreduce aggregation

11
推荐指数
1
解决办法
542
查看次数

用于在磁盘上有效存储整数对集的数据结构选项?

我有一堆处理文档聚类的代码.一步涉及计算每个文档与给定语料库中的每个其他文档的相似性(对于"类似"的一些不重要的定义),并存储相似性以供以后使用.相似之处是不同的,我不关心具体的相似性是什么,我的分析的目的,只是它在什么桶.例如,如果文件15378和3278是52%相似,有序对(3278,15378)得到存储在[0.5,0.6]桶中.在初始分析之后,文档有时会在语料库中添加或删除,因此根据需要将相应的对添加到桶中或从桶中删除.

我正在研究存储这些ID对列表的策略.我们发现一个SQL数据库(这个项目的大多数其他数据都存在)对于我们的目的来说太慢而且磁盘空间太大,所以目前我们将每个存储桶存储为磁盘上的整数压缩列表(最初zlib压缩,但现在使用lz4代替速度).我喜欢这件事:

  • 阅读和写作都非常快
  • 语料库的事后添加是相当简单的添加(对于lz4比对zlib少一点,因为lz4没有内置的框架机制,但可行)
  • 在写入和读取时,数据都可以流式传输,因此不需要一次性保存在内存中,考虑到我们的语料库大小,这将是令人望而却步的

有点糟糕的事情:

  • 删除是一个巨大的痛苦,基本上涉及流式传输所有桶并写出新的,省略任何包含已被删除的文档的ID的对
  • 我怀疑通过更专用的数据结构和/或压缩策略,我在速度和紧凑性方面仍然可以做得更好

那么:我应该关注哪种数据结构?我怀疑正确的答案是某种奇特的简洁数据结构,但这不是我所熟知的空间.此外,如果重要:所有文档ID都是无符号的32位整数,处理这些数据的当前代码是用C语言编写的,作为Python扩展,所以这可能是我们坚持的通用技术系列.

c python integer data-structures

6
推荐指数
1
解决办法
578
查看次数

使用node.js改造现有的Backbone应用程序以进行服务器端渲染?

我有一个Web应用程序,其当前结构是使用backbone.js和客户端模板在浏览器中呈现所有内容,从Python驱动的JSON API中提取所有动态内容.有些应用程序足够内容,我不介意将其提供给谷歌和支持非JS客户端,所以我一直在考虑转向一个架构,其中第一个请求由一个节点应用程序处理,该应用程序呈现第一页并为其提供服务,在此之后,如果启用了JS以便在后续工作时提供后续请求,Backbone将接管客户端.

我知道有一些努力(比如开发种子的骨头)来实现这种策略,但是他们似乎期待一个应用程序在预先计划好时使用它们,无论是好还是坏,我的不是.

我正在寻找工具,库等,这将使这种过渡更容易.如果在非JS客户端的某些领域提供略有不同的体验,那么奖励点是可行的.思考?

serverside-javascript node.js backbone.js

5
推荐指数
1
解决办法
798
查看次数