2013-03-17 38 views
0

我正在計算大文檔中的tf-idf。我擁有的字數超過80,000。我正在嘗試在csv文件中編寫稀疏矩陣。我使用的代碼類似於此處的回答How to add a new column to a CSV file using Python?如何有效地在python中編寫csv?

輸出文件太大,超過700 MB只能處理大約30,000個字。 所以,我的問題是如何有效地寫它? 謝謝。

+1

如果你正在寫一個稀疏矩陣爲CSV,那麼對於文件大小你可以做的確實不多。壓縮能夠解決您的需求嗎?你會得到一個令人驚歎的壓縮比率,主要是逗號文件。 – 2013-03-17 18:29:27

+2

此外,你只是試圖將信息保存到磁盤,或者你設置使用.csv格式?如果前者是真的,那麼你有更多的選擇。 – 2013-03-17 18:29:52

+1

@David認爲你已經涵蓋了我將要做的所有要點 - 這個問題肯定需要更明確的定義 – 2013-03-17 18:31:49

回答

1

CSV是CSV,你可以做的事情不多。你可以簡單地gzip它,如果你真的想要堅持CSV,或者你可以使用一些自定義格式,更好地適合您的需求。

例如,您可以使用字典並將其導出爲JSON格式,或者創建一個專用對象來處理您的數據並將其設置爲pickle它。

當我使用TF-IDF時,我使用sqlite(通過sqlalchemy)存儲文檔信息,TF數據作爲JSON格式的字典。從我創建IDF統計,然後再使用numpy

+0

謝謝你讓我知道鹹菜模塊。我現在不使用csv,而pickle文件似乎對我很好用! – hshed 2013-03-18 14:21:56

10

您可以輕鬆地通過使用gzip的模塊直接寫一個gzip文件做TFIDF的休息,:

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文件可能無法讀取。

你也可以做一個更Python風格:

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

這保證該文件將被關閉。

希望這會有所幫助。