Tôi đang cố tạo ma trận tài liệu thuật ngữ với NLTK và gấu trúc. tôi đã viết các chức năng sau:Thuật ngữ tài liệu thuật ngữ hiệu quả với 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
để chạy nó
import nltk
from nltk.corpus import PlaintextCorpusReader
corpus_root = 'C:/Data/'
newcorpus = PlaintextCorpusReader(corpus_root, '.*')
x = fnDTM_Corpus(newcorpus)
Nó hoạt động tốt cho vài file nhỏ ở corpus nhưng mang lại cho tôi một MemoryError khi tôi cố gắng chạy nó với một corpus trong số 4000 tệp (khoảng 2 kb).
Tôi có thiếu gì đó không?
Tôi đang sử dụng một con trăn 32 bit. (sáng trên cửa sổ 7, hệ điều hành 64 bit, CPU lõi tứ, RAM 8 GB). Tôi có thực sự cần phải sử dụng 64 bit cho kho văn bản này không?
bạn đã thử 'gensim' hoặc các thư viện tương tự đã tối ưu hóa mã của chúng cho tf-idf chưa? http://radimrehurek.com/gensim/ – alvas
4000 tệp là một kho nhỏ. Bạn cần một đại diện [thưa thớt] (https://en.wikipedia.org/wiki/Sparse_matrix). Pandas có những thứ như Gensim và scikit-learn. –
Tôi nghĩ 'pd.get_dummies (df_column)' có thể thực hiện công việc. Có lẽ tôi đang thiếu một cái gì đó về ma trận thuật ngữ tài liệu –