scikit を使用して、tfidf などのテキスト処理を行っています。ファイル名の量はうまく処理されています (~40k)。しかし、一意の単語の数に関しては、印刷された一意の単語の量のサイズを取得するか、numpy 配列をファイルにダンプするか (savetxt を使用) にかかわらず、配列/マトリックスを処理できません。 . 以下はトレースバックです。tfidf の上位の値を取得できれば、すべてのドキュメントのすべての単語に対してそれらを必要としないためです。または、他の単語を計算から除外することもできます (ストップ ワードではなく、追加できるテキスト ファイル内の別の単語セットを除外します)。とはいえ、私が発する言葉がこの状況を緩和するかどうかはわかりません。最後に、どうにかして行列の一部を取得できれば、それも機能する可能性があります。この種のことを扱う例はどれも役に立ち、アイデアの出発点をいくつか教えてくれます。(PSを見てHashingvectorizerを試してみましたが、それでtfidfを実行できないようですか?)
Traceback (most recent call last):
File "/sklearn.py", line 40, in <module>
array = X.toarray()
File "/home/kba/anaconda/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 790, in toarray
return self.tocoo(copy=False).toarray(order=order, out=out)
File "/home/kba/anaconda/lib/python2.7/site-packages/scipy/sparse/coo.py", line 239, in toarray
B = self._process_toarray_args(order, out)
File "/home/kba/anaconda/lib/python2.7/site-packages/scipy/sparse/base.py", line 699, in _process_toarray_args
return np.zeros(self.shape, dtype=self.dtype, order=order)
ValueError: array is too big.
関連コード:
path = "/home/files/"
fh = open('output.txt','w')
filenames = os.listdir(path)
filenames.sort()
try:
filenames.remove('.DS_Store')
except ValueError:
pass # or scream: thing not in some_list!
except AttributeError:
pass # call security, some_list not quacking like a list!
vectorizer = CountVectorizer(input='filename', analyzer='word', strip_accents='unicode', stop_words='english')
X=vectorizer.fit_transform(filenames)
fh.write(str(vectorizer.vocabulary_))
array = X.toarray()
print array.size
print array.shape
編集:これが役立つ場合は、
print 'Array is:' + str(X.get_shape()[0]) + ' by ' + str(X.get_shape()[1]) + ' matrix.'
私の場合、大きすぎる疎行列の次元を取得します。
Array is: 39436 by 113214 matrix.