Sto cercando di creare una matrice di documenti con NLTK e panda. ho scritto la seguente funzione:Document Matrix a termine efficiente con NLTK
def fnDTM_Corpus(xCorpus):
import pandas as pd
'''to create a Term Document Matrix from a NLTK Corpus'''
fd_list = []
for x in range(0, len(xCorpus.fileids())):
fd_list.append(nltk.FreqDist(xCorpus.words(xCorpus.fileids()[x])))
DTM = pd.DataFrame(fd_list, index = xCorpus.fileids())
DTM.fillna(0,inplace = True)
return DTM.T
per eseguirlo
import nltk
from nltk.corpus import PlaintextCorpusReader
corpus_root = 'C:/Data/'
newcorpus = PlaintextCorpusReader(corpus_root, '.*')
x = fnDTM_Corpus(newcorpus)
Funziona bene per alcuni piccoli file nella corpus, ma mi dà un MemoryError quando provo a farlo funzionare con un corpus di 4.000 file (di circa 2 kb ciascuno).
Mi manca qualcosa?
Sto usando un pitone a 32 bit. (su Windows 7, 64-bit OS, CPU Core Quad, 8 GB RAM). Devo davvero usare 64 bit per un corpo di queste dimensioni?
hai provato 'gensim' o librerie simili che hanno ottimizzato il loro codice per tf-idf? http://radimrehurek.com/gensim/ – alvas
4000 file è un corpus molto piccolo. Hai bisogno di una rappresentazione [sparse] (https://en.wikipedia.org/wiki/Sparse_matrix). I panda ne hanno, così come Gensim e Scikit imparano. –
Pensavo che 'pd.get_dummies (df_column)' potesse fare il lavoro. Forse mi manca qualcosa sul termine documento matrix –