加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:23:30 所属栏目:Python 来源:网络整理
导读:不幸的是,我正在处理一个非常大的语料库,它实际上已经传播到数百个.gz文件中 – 价值24千兆字节(打包). Python真的是我的母语(哈)但是我想知道我是否还没遇到过需要学习“更快”语言的问题? 每个.gz文件包含一个纯文本的单个文档,大约56MB gzip压缩,大约210
不幸的是,我正在处理一个非常大的语料库,它实际上已经传播到数百个.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”(猜测你在这里寻找的输出).对于每一行,我会在地图中查找地图中的所有子图,更新计数,并将更新的行写出到新的输出文件中.那个将在下一次迭代中使用,直到我处理完所有输入文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读