python 压缩文件搜索_Python – 在数百个大型gzip压缩文件中搜索项目

不幸的是,我正在处理一个非常大的语料库,它实际上已经传播到数百个.gz文件中 – 价值24千兆字节(打包). Python真的是我的母语(哈)但是我想知道我是否还没遇到过需要学习“更快”语言的问题?

每个.gz文件包含一个纯文本的单个文档,大约56MB gzip压缩,大约210MB解压缩.

每一行都是n-gram(bigram,trigram,quadrigram等),右边是频率计数.我需要基本上创建一个文件,存储每个四字组的子串频率以及它的整串频率计数(即4个单字节频率,3个双字母频率和2个三字母频率,总共10个数据点).每种类型的n-gram都有自己的目录(例如,所有的bigrams都出现在他们自己的33个.gz文件集中).

我知道一个简单,强力的解决方案,以及导入哪个模块使用Python中的gzip压缩文件,但我想知道是否有一些东西不会花费我几周的CPU时间?关于加快这一过程的任何建议,无论多么轻微,都将非常感谢!

解决方法:

这将有助于得到几行和预期输出的例子.但据我所知,这里有一些想法.

您当然不希望每次处理单个文件时处理所有文件,或者更糟糕的是,只需要一个4克.理想情况下,您需要浏览一次文件.所以我的第一个建议是维护一个中间频率列表(这些10个数据点集),它们首先只考虑一个文件.然后,当您处理第二个文件时,您将更新您遇到的项目的所有频率(并且可能会添加新项目).那么你会继续这样做,增加频率,因为你发现更多匹配的n-gram.最后写出一切.

更具体地说,在每次迭代时,我会将一个新的输入文件读入内存,作为字符串到数字的映射,其中字符串是,例如,空格分隔的n-gram,数字是它的频率.然后,我将处理上一次迭代的中间文件,该文件将包含您的预期输出(具有不完整的值),例如, “a b c d:10 20 30 40 5 4 3 2 1 1”(猜测你在这里寻找的输出).对于每一行,我会在地图中查找地图中的所有子图,更新计数,并将更新的行写出到新的输出文件中.那个将在下一次迭代中使用,直到我处理完所有输入文件.

标签:python,large-files,gzip,corpus,large-data-volumes

来源: https://codeday.me/bug/20190710/1419553.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值