我正在使用 Tesseract 对数百万个 PDF 进行 OCR,并且我正在尝试尽可能地发挥性能。
我当前的管道用于convert将 PDF 转换为 PNG 文件(每页一个),然后对每个文件使用 Tesseract。
在分析过程中,我发现很多时间都花在将文件写入磁盘,然后再次读取它们,所以我想将所有这些都移到内存中。
我已经在内存中进行了 PDF 到 PNG 的转换,所以现在我需要一种方法将内存中的 blob 传递给 Tesseract,而不是为其提供文件路径?我找不到任何相关文档或示例?
下面是背景故事,但这是问题:我发现,如果我在docker主机上运行了postgresql,则可以通过作为文件安装的域套接字在容器中连接到它:
docker run -v /var/run/postgresql/:/var/run/postgresql
Run Code Online (Sandbox Code Playgroud)
这感觉像是一个主要的hack,所以我很好奇这在生产环境中是否真的可怕。有什么想法吗?
背景是我在docker主机上运行了postgresql,因为我不信任docker直接运行postgresql。
所以我需要从在同一服务器上运行的Docker容器连接到该postgresql实例。我试过了:
使用 --add-host
但这也是一个黑客,因为它要求将docker run放在脚本中以找出主机的正确IP。就像是:
docker run --add-host=postgres-host:$(ip route show | awk {print $2})
Run Code Online (Sandbox Code Playgroud)
我不喜欢那样做。
我尝试使用--net=host,但这不是我们想要的。我们想要一个覆盖网络。
我试图通过在容器中查找主机的IP地址来在容器中进行设置,但为此目的运行脚本并不感到很好。
所以...我想:“使用域套接字怎么办?”
我有一个这样的网页:
<form id="some-form">
<input type='text'>
<button type="submit">
</form>
. . . later in the page . . .
<div id="more-inputs">
<input type="checkbox">
<input type="text">
</div>
Run Code Online (Sandbox Code Playgroud)
由于各种原因,后面的输入和复选框不能以原始形式出现,但是在提交表单时,我想使用jQuery从复选框和其他表单中收集值,并将它们作为GET请求提交.
我有一个名为的模型Document,我想添加一个新表,DocumentCluster它位于它上面,带有一个外键Document.
class DocumentCluster(models.Model):
sub_document = models.ForeignKey(Document)
...lots of fields here...
Run Code Online (Sandbox Code Playgroud)
当我使用South添加此表时,我需要通过将主键和外键设置为相同的值来填充它.
例如,如果我现在有一个Document与对象pk12,新的DocumentCluster对象将有一个pk12的和一个外键Document12号.
虽然我们需要DocumentCluster pk值来匹配外键值似乎很奇怪,但有一个重要原因.我们Document pk在URL中使用,但在更改后,URL将加载a DocumentCluster而不是a Document,因此我们将需要pkin DocumentCluster与其中的相同Document.
一旦完成,我希望它的PK DocumentCluster是一个AutoField,从迁移的最高值开始递增.
可以这样做吗?
我试图以call_command一种非常类似于这个问题的方式使用Django 而没有答案.
我称之为的方式是:
args = []
kwargs = {
'solr_url': 'http://127.0.0.1:8983/solr/collection1',
'type': 'opinions',
'update': True,
'everything': True,
'do_commit': True,
'traceback': True,
}
call_command('cl_update_index', **kwargs)
Run Code Online (Sandbox Code Playgroud)
理论上,根据文档,这应该有效.但它不起作用,它只是不起作用.
这是add_arguments我的Command类的方法:
def add_arguments(self, parser):
parser.add_argument(
'--type',
type=valid_obj_type,
required=True,
help='Because the Solr indexes are loosely bound to the database, '
'commands require that the correct model is provided in this '
'argument. Current choices are "audio" or "opinions".'
)
parser.add_argument(
'--solr-url',
required=True,
type=str,
help='When swapping cores, it …Run Code Online (Sandbox Code Playgroud) TL; DR我正在寻找一种按分钟存储,增加和检索事件计数范围的方法.
我正在寻找一种在redis中创建递增时间序列的解决方案.我希望将分数存储到分钟.我的目标是能够查找时间范围并获得值.因此,如果特定键的事件每30分钟发生一次,则为instnace.我想做像zrange这样的事情,并获得他们的关键价值观.我也希望使用像zincrby这样的东西来增加价值.我当然看了一个有条不紊的装置,看起来像是一个完美的装,直到我意识到我只能对得分进行范围扫描,而不是值.最佳解决方案是使用分钟数作为分数,然后使用排序集中的值作为该分钟的事件数.我遇到的问题是,锌只会增加分数而不是值.我无法找到一种原子地增加值的方法.我还使用当前分钟作为键和事件计数作为值来查看散列映射.我能够使用hincrby增加值,但问题是它不支持获取一系列键.
任何帮助,将不胜感激.
我正在使用Cygwin的cp.exe来复制Windows 7中的文件.不幸的是,当我对文件的权限进行更改时.
我尝试过使用:
cp --preserve=all
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,当我检查原始文件与副本的安全性时,副本具有不同的权限.
显然,在使用Cygwin进行复制时必须有一种方法来保留权限,但我找不到它.
当我使用"匹配所有文档"查询' *:*',星号冒号星号时,结果如何排序?
我认为它们按相关性排序,但在这种情况下相关性是相同的,对吧?那么,这个计划是什么?
我试图使用时区感知日期时间dateutil.parser.parse()来解析默认str(datetime.datetime.now())输出.但是,parse()似乎丢失了时区信息并将其替换为当地时间时区.下面是IPython输出:
In [1]: from django.utils.timezone import now
In [3]: import dateutil
In [4]: t = now()
In [6]: print t
2014-07-14 08:51:49.123342+00:00
In [7]: st = unicode(t)
In [8]: print dateutil.parser.parse(st)
2014-07-14 08:51:49.123342+02:00
Run Code Online (Sandbox Code Playgroud)
据我dateutil所知,在猜测日期格式时会有一些遗传因素,这里可能会出错.
如何为解析时区感知日期时间提供准确的日期时间格式?
更好的 - 如果知道格式如何只使用Python stdlib解析这个日期时间,而没有dateutil依赖?
像在另一个问题中一样,我想从celery任务返回的列表中创建一个celery组。这个想法是,第一个任务将返回一个列表,第二个任务将将该列表分解为列表中每个项目的并发任务。
计划是在下载内容时使用它。第一个任务从网站获取链接,第二个任务是一个链,该链下载页面,对其进行处理,然后将其上传到s3。最后,完成所有子页面后,该数据库在我们的数据库中被标记为完成。就像是:
chain(
get_links_from_website.si('https://www.google.com'),
dmap.s( # <-- Distributed map
download_sub_page.s() |
process_sub_page.s() |
upload_sub_page_to_s3.s()
),
mark_website_done.s()
)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我看到的解决方案似乎可以很好地解决此问题,但是当第二个任务是链时,由于clone没有进行深度复制的问题,该解决方案失败了(有关详细信息,请参见此答案的评论):
@task
def dmap(it, callback):
# Map a callback over an iterator and return as a group
callback = subtask(callback)
return group(callback.clone([arg,]) for arg in it)()
Run Code Online (Sandbox Code Playgroud)
还有一个问题是,如果可迭代项的长度为10,000个,它将创建一个包含10,000个项目的组。可以想象,这消耗了我们的内存使用量。
因此,我正在寻找一种做到dmap这一点的方法:
python ×4
django ×3
postgresql ×2
acl ×1
argparse ×1
celery ×1
chain ×1
cp ×1
cygwin ×1
datetime ×1
django-south ×1
docker ×1
forms ×1
html ×1
java ×1
jquery ×1
lettuce ×1
performance ×1
permissions ×1
python-2.7 ×1
redis ×1
relevance ×1
solr ×1
tesseract ×1
wand ×1