我使用scikit-learn TfidfVectorizer来找出两个文档中最重要的单词。每个文档的容量为1.9GB (约9,000万字),并且已经被更低的大小写、词干(使用nltk.stem.porter.PorterStemmer)和无尾词(英文停止词)。
我使用以下代码:
def simp_tokenizer(text):
from nltk import word_tokenize
return word_tokenize(text)
def make_corpus(path):
from glob import glob
files = glob(path)
for doc in files:
yield open(doc, 'r').read()
def tfidf(path):
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = make_corpus(path = path)
tfidf = TfidfVectorizer(max_features = 500, max_df = 0.8, min_df = 0.2, use_idf = True, tokenizer = simp_tokenizer, analyzer = 'word', ngram_range = (1,1))
tfs = tfidf.fit_transform(corpus)
return tfs我有16 60内存,在运行60%的内存一段时间后,引发MemoryError异常。
我做了一些研究,并加入了make_corpus函数,以避免同时将两个文档加载到内存中。我还根据SO和Mark博客上的建议,将max_features降至500,min_df和max_df分别降至0.2和0.8,以解决这个问题。
但这一错误继续存在。
欢迎任何帮助。
谢谢!
发布于 2016-03-09 10:47:38
Python不会将内存限制强加于操作系统所强加的范围之外。确保您没有用ulimit或等效的方法限制进程的内存使用。同时运行top,查看进程是否使用了所有可用内存。
你的文档怎么会接近2GB?这是多个文档的连接吗?如果是这样的话,也许可以更多地分割文档。
我建议设置星火安装并检查代码。您已经有了文件,所以只剩下运行tfidf部件了。它有Python接口,所以它是相当无痛的。火花是高度优化的工作与大文件-希望它将克服科学-学习的错误。
from pyspark import SparkContext
from pyspark.mllib.feature import HashingTF
from pyspark.mllib.feature import IDF
sc = SparkContext(...)
# Load documents (one per line).
documents = sc.textFile("...").map(lambda line: line.split(" "))
hashingTF = HashingTF()
tf = hashingTF.transform(documents)
tf.cache()
idf = IDF().fit(tf)
tfidf = idf.transform(tf)https://stackoverflow.com/questions/35857837
复制相似问题