Próbuję stworzyć terminową macierz dokumentów z NLTK i pandami. napisałem następującą funkcję:Efektywna macierz dokumentów terminowych z 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
uruchomić go
import nltk
from nltk.corpus import PlaintextCorpusReader
corpus_root = 'C:/Data/'
newcorpus = PlaintextCorpusReader(corpus_root, '.*')
x = fnDTM_Corpus(newcorpus)
To działa dobrze dla kilku małych plików w korpusie, ale daje mi MemoryError gdy próbuję uruchomić go z korpusu 4000 plików (po około 2 KB).
Czy czegoś brakuje?
Używam 32-bitowego python. (jestem w systemie Windows 7, 64-bitowym systemie operacyjnym, Core Quad CPU, 8 GB RAM). Czy naprawdę potrzebuję 64-bitowego korpusu tego rozmiaru?
wypróbowałeś 'gensim' lub podobne biblioteki, które zoptymalizowały swój kod dla tf-idf? http://radimrehurek.com/gensim/ – alvas
Pliki 4000 to maleńki korpus. Potrzebujesz reprezentacji [sparse] (https://en.wikipedia.org/wiki/Sparse_matrix). Pandy mają takie, jak Gensim i nauka naukowa. –
Myślałem, że 'pd.get_dummies (df_column)' może wykonać zadanie. Być może brakuje mi czegoś o dokumencie termin macierzyna –