2

シリアル化されたコーパスをに保存できますfoobar.mmが、読み込もうとするとUnpicklingError. ただし、辞書のロードは問題ないようです。誰でもこれを解決する方法を知っていますか? そして、なぜこれが起こるのですか?

>>> from gensim import corpora
>>> docs = ["this is a foo bar", "you are a foo"]
>>> texts = [[i for i in doc.lower().split()] for doc in docs]
>>> print texts
[['this', 'is', 'a', 'foo', 'bar'], ['you', 'are', 'a', 'foo']]

>>> dictionary = corpora.Dictionary(texts)
>>> dictionary.save('foobar.dic')
>>> print dictionary
Dictionary(7 unique tokens)
>>> corpora.Dictionary.load('foobar.dic')
<gensim.corpora.dictionary.Dictionary object at 0x329f910>

>>> corpus = [dictionary.doc2bow(text) for text in texts]
>>> corpora.MmCorpus.serialize('foobar.mm', corpus)
>>> corpus = corpora.MmCorpus.load('foobar.mm')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/gensim-0.8.6-py2.7.egg/gensim/utils.py", line 166, in load
    return unpickle(fname)
  File "/usr/local/lib/python2.7/dist-packages/gensim-0.8.6-py2.7.egg/gensim/utils.py", line 492, in unpickle
    return cPickle.load(open(fname, 'rb'))
cPickle.UnpicklingError: invalid load key, '%'.
4

2 に答える 2

4

http://radimrehurek.com/gensim/tut1.html#corpus-formatsのドキュメントを参照してください。

あなたがしようとしているのは、コーパスを MatrixMarket 形式 (= テキスト形式) で保存し、保存/読み込みバイナリ インターフェイスを使用して読み込むことです。

シリアル化された MatrixMarket コーパスをロードするには、単純にcorpus = corpora.MmCorpus('foobar.mm')

于 2013-12-04T22:15:34.757 に答える
-1

gensimスタックトレースが明らかにするように(これcorporaが何であれ)が使用pickleされているため、限られたタイプのデータしか保存できません。詳細については、ピクルス化およびピクルス化解除できるものは何ですか? を参照してください。Python ドキュメントで。

これが当てはまらない場合 (つまり、pickle したいものと unpickle したいものが pickle 可能でなければならない場合)、pickle モジュールにバグを見つけたのではないかと心配しています。おそらく、新しい Python バージョンにアップグレードすることで問題を解決できます。

于 2013-09-18T08:52:05.067 に答える