2016-11-13 4 views
0

私はPython(2.7.9)とNLTK(3.2.1)で自然言語処理を行っています。現在私がプログラムを実行するたびに、私が現在行っていることはです。私は大きなコーパスで品詞タグ付けを行います。Pythonでファイルとして保存されたリストにアクセスするには?

たタグ付きコーパスは、このの拡大版のようになります。理想的には

[('a', 'DT'), ('better', 'JJR'), ('widower', 'JJR'), ('than', 'IN'), 
('my', 'PRP$'), ('father', 'NN'), ('.', '.'), ('Aunt', 'NNP'), 
('Sybil', 'NNP'), ('had', 'VBD'), ('pink-rimmed', 'JJ'), ('azure', 
'JJ'), ('eyes', 'NNS'), ('and', 'CC'), ('a', 'DT'), ('waxen', 'JJ'), 
('complexion', 'NN'), ('.', '.'), ('She', 'PRP'), ('wrote', 'VBD'), 
('poetry', 'NN'), ('.', '.'), ('She', 'PRP'), ('was', 'VBD'), 
('poetically', 'RB'), ('superstitious', 'JJ')] 

、私は、ファイルにこのリストを保存し、変数に、私は私のプログラムを実行するたびにファイルを読んでいました。ファイルにリストを保存すると、非常に簡単です:

POScorpus = pos_tag(words) 

#I convert this to a string so I can write it to a file. 

POScorpus_string = str(POScorpus) 

#I then write it to a file. 

f = open('C:\Desktop\POScorpus.txt', 'w') 

f.write(POScorpus_string) 

f.close() 

問題は、私は変数にファイルを読むために行くとき、read()機能のみをリストとして文字列ではないとしてファイルを読み込むことです。

私の質問は簡単です:ファイルを文字列ではなくリストとして読み取るにはどうすればよいですか?これは比較的簡単だと思いますが、それを行う方法に関する情報は見つかりませんでした。

(謝罪これは、オフトピックまたはだまされやすい人の場合。)

+0

あなたは[Pythonオブジェクトの直列化](https://docs.python.org/2/library/pickle.html) – Bahrom

+0

おかげで見たいと思うかもしれません! eval()は今のところそれをしましたが、そのリンク@Bahromを調べます。私はこの質問を削除するだろうが、それはすでに答えられている... –

答えて

1

文字列は、eval()関数を使用してリストに変換できます。つまり、これは問題に対する最も効率的で、メモリに優しい解決策ではありません。

より良いオプションは、PythonのpickleまたはcPickleモジュールを使用することです。 「ピックリング」とは、Pythonオブジェクト(リストや辞書など)をバイトストリームとして保存するプロセスを指し、オブジェクトタイプの損失や変形を起こすことなく、すぐに変数にアンロードできます。酸洗いは、「シリアライゼーション」および「マーシャル」とも呼ばれます。ここで

は一例です:

#HOW TO PICKLE THE POS-TAGGED CORPUS 

#Pickling involves saving a Python object as a file (without first converting 
#it to a string). 

#Let's pickle TaggedCorpus so we can use it efficiently later: 

import cPickle         #imports fast pickle module (written in C) 

f = open('C:\Desktop\TaggedCorpus.p', 'w')  #creates pickle file f 
cPickle.dump(TaggedCorpus, f)     #dumps data of TaggedCorpus object to f 
f.close() 

#To unpickle the object, simply load the file into a variable: 

f = open('C:\Desktop\TaggedCorpus.p', 'r')  #opens the pickle file as read 
TaggedCorpus = cPickle.load(f)     #loads the content of f as TaggedCorpus 
f.close() 
0

あなたはeval(your_string)を使用してセットに文字列をキャストすることができます。

+0

ありがとう!出来た。 –

+1

悪いアドバイス。代わりに、pickleを使用する必要があります。https://docs.python.org/3/library/pickle.html – alvas

関連する問題