2013-03-17 2 views
0

Я работаю над вычислением tf-idf в большом документе. Количество слов у меня более 80 000. Я пытаюсь написать разреженную матрицу в файле csv. Я использую код, аналогичный приведенному здесь How to add a new column to a CSV file using Python?Как эффективно писать csv в python?

Выходной файл слишком большой по размеру, превышающий 700 МБ только для 30 000 слов. Итак, мой вопрос заключается в том, как написать его эффективно? Спасибо.

+1

Если вы пишете разреженную матрицу для CSV, вы действительно не можете многое сделать по размеру файла. Будет ли сжатие решить ваши потребности? Вы получите потрясающий коэффициент сжатия с файлом, который в основном является запятыми. –

+2

Кроме того, вы просто пытаетесь сохранить информацию на диск или используете ли вы формат .csv? Если первое верно, у вас есть еще много вариантов. –

+1

@ Давид подумал, что вы рассмотрели все пункты, которые я собирался сделать. Этот вопрос определенно должен быть более четко определен. –

ответ

1

CSV CSV и вы не можете с этим поделать. Вы можете просто gzip, если вы действительно хотите придерживаться CSV, или вы можете использовать какой-то пользовательский формат, который лучше всего соответствует вашим потребностям.

Например, вы можете использовать словарь и экспортировать в формат JSON или создать выделенный объект, который обрабатывает ваши данные, и pickle.

Когда я работал с TF-IDF, я использовал sqlite (через sqlalchemy) для хранения информации о документах с данными TF в качестве словаря в формате JSON. Из того, что я создал статистику IDF, а затем сделал остальную TFIDF, используя numpy

+0

Спасибо, что сообщили мне о модуле рассола. Я не использую csv сейчас, и файл pickle, кажется, отлично работает для меня! – hshed

10

Вы можете легко написать непосредственно в файл GZIP, используя модуль сжатия:

import gzip 
import csv 

f=gzip.open("myfile.csv.gz", "w") 
csv_w=csv.writer(f) 
for row in to_write : 
    csv_w.writerow(row) 
f.close() 

Не забудьте закрыть файл, в противном случае полученный файл csv.gz может быть нечитаемым.

Вы также можете сделать это в более вещий стиле:

with gzip.open("myfile.csv.gz", "w") as f : 
    csv_w = csv.writer(f) 
    ... 

, который гарантирует, что файл будет закрыт.

Надеюсь, это поможет.

Смежные вопросы