我试图用NLTK和pandas创建一个术语文档矩阵。 我编写了以下函数:
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
运行它
import nltk
from nltk.corpus import PlaintextCorpusReader
corpus_root = 'C:/Data/'
newcorpus = PlaintextCorpusReader(corpus_root, '.*')
x = fnDTM_Corpus(newcorpus)
它可以很好地处理语料库中的一些小文件,但是当我试图用4000个文件(每个文件大约2 kb)的语料库运行它时,它会给我一个MemoryError。
我遗漏了什么吗?
我使用的是32位的python。 (am在windows 7上,64位操作系统,核心四CPU,8 GB RAM)。我真的需要用64位来做这种大小的语料库吗?
一种使用令牌和数据帧的替代方法
我知道OP想要在NLTK中创建tdm,但是
textmining
包(pip install textmining
)使它非常简单:输出:
或者,可以使用pandas和sklearn[source]:
输出:
多亏了拉迪姆和拉斯曼。 我的目标是要有一个像你在R tm得到的DTM。 我决定使用scikit学习,部分灵感来自this blog entry。这就是我想出的密码。
我把它贴在这里,希望其他人会发现它有用。
在目录中的文本列表中使用它
创建数据帧
相关问题 更多 >
编程相关推荐