【发布时间】:2014-01-30 18:41:16
【问题描述】:
from __future__ import division
import dataProcess
import csv,re
from collections import OrderedDict
import itertools
#######################################################################################
# Pruning of N-grams depending upon the frequency of tags #
#######################################################################################
for k in range(2,8):
filename="Dataset/Cross/N_gram_Features_Pruned/"+str(k)+"_gram.txt"
filewrite=open(filename,"w")
CSV_tag_reader=csv.reader(open("Dataset/Cross/N_grams_recored/"+str(k)+"_gram.csv","r"),delimiter=',')
header_data=CSV_tag_reader.next();
table = [row for row in CSV_tag_reader]
values=[]
result_tag=[]
for j in range(0,len(header_data)):
sum1=0
avg1=0
for i in range (0,3227):
sum1=sum1+int(table[i][j])
## print "************************************************************"
## print sum1
avg1=sum1/3227
## print avg1
if(avg1>=0.3):
result_tag.append(header_data[j])
print len(header_data)
print len(result_tag)
print "************************************************************"
filewrite.write(str(result_tag))
我的代码是计算 3227 个数据样本中特定单词的频率。我在 3227 个样本中记录了大约 277436 个单词的频率。所以图像 csv 文件具有 3227 行和 60k 列。所以我正在读取每个单词并将频率和找到平均值..bt 在运行此代码时出现内存错误?我该如何解决?
Error: Traceback (most recent call last): File "N_gram_pruning.py", line 15, in <module> table = [row for row in CSV_tag_reader] MemoryError
我的 csv 文件就像 thisss
f1 f2 f3 f4.....f277436(header row)
0 9 1 4 70
56 2 66 8 23
(3227 rows...)
【问题讨论】:
-
所以... 3227 * 60k, = 193,620,000 条记录。你不觉得往内存里塞东西有点多吗?
-
我也很困惑——
for k in range(6,7)就是k=6 -
是的,我知道该怎么做?我有这么多数据..
-
如果您遇到内存错误,您应该使用生成器而不是列表。但是,我对
csv.reader的工作还不够多,无法真正了解您要使用的数据结构。你可以print(CSV_tag_reader[0])告诉我它是什么样子的吗?我可以指导您制作一个生成器,对您的字数进行求和和平均。 -
我会逐行读取 csv 文件,并将其排序为数据库结构。它不适合内存,但您可以使用
dbm模块创建一个在磁盘上的 dict-looking 对象。
标签: python python-2.7 python-3.x