2017-03-21 14 views
0

私は現在ubuntuを実行している仮想マシンに詩生成プログラムをインストールしようとしています。Python、Django、pickle resource Errno2このようなファイルやディレクトリはありません:

Exception Type:  IOError 
Exception Value:  

[Errno 2] No such file or directory: 'poetry_generator/resources/bigram.pickle' 

Exception Location:  /home/lee/Downloads/PoEmo-master/poetry_generator/architecture/experts/generating_experts/collocation_expert.py in train, line 31 

がpoetry_generator以内に/ resourcesフォルダがありません、そして何bigram.picklesはどちらか、それ内のファイルません:私は、サーバーを実行して、テキストを入力し、生成打つとき、私は以下のエラーを取得します。これは、次のスクリプトのlinke 31を問題として識別します。

import nltk 
import os 
import pickle 
from pattern import en 

from poetry_generator.structures.word import Word 
from poetry_generator.architecture.experts.generating_experts.word_generating_expert import WordGeneratingExpert 
from poetry_generator.settings import resources_dir 


class CollocationExpert(WordGeneratingExpert): 
    """Generating most common contexts for words for words""" 

    def __init__(self, blackboard): 
     super(
      CollocationExpert, 
      self).__init__(
      blackboard, 
      "Collocation Expert") 
     self.word_tag_pairs = [] 

    def train(self): 
     bigram_pickle_file = os.path.join(resources_dir, 'bigram.pickle') 
     try: 
      with open(bigram_pickle_file,'rb') as f: 
       self.word_tag_pairs = pickle.load(f) 

     except IOError: 
      tagged_words = nltk.corpus.brown.tagged_words(tagset='universal') 
      self.word_tag_pairs = list(nltk.bigrams(tagged_words)) 
      with open(bigram_pickle_file,'w') as f: 
       pickle.dump(self.word_tag_pairs,f) 


    '''Finding verbs for noun ''' 

    def _find_verbs(self, word): 
     word_bigrams = [(a[0], b[0]) for a, b in self.word_tag_pairs 
               if a[0] == word.name and a[1] == 'NOUN' and b[1] == 'VERB' 
               and en.conjugate(b[0], "inf") not in ('be', 'have')] 
     return self.__get_best_collocations(word, word_bigrams) 

    '''Finding adjectives for noun''' 

    def _find_epithets(self, word): 
     word_bigrams = [(b[0], a[0]) for (a, b) in self.word_tag_pairs 
         if b[0] == word.name and b[1] == 'NOUN' and a[1] == 'ADJ'] 
     epithets = self.__get_best_collocations(word, word_bigrams) 
     return epithets 

    '''Finding nouns described by adjective''' 

    def _find_comparisons(self, adjective): 
     word_bigrams = [(a[0], b[0]) for (a, b) in self.word_tag_pairs 
         if a[0] == adjective.name and b[1] == 'NOUN' and a[1] == 'ADJ'] 
     comparisons = self.__get_best_collocations(adjective, word_bigrams) 
     return comparisons 

    '''Adding epithets for noun to pool''' 

    def _add_epithets(self, word): 
     epithets = set([Word(w, "JJ") for w in self._find_epithets(word)]) 
     if word not in self.blackboard.pool.epithets: 
      self.blackboard.pool.epithets[word] = [] 
     self.blackboard.pool.epithets[word] += list(epithets) 
     return epithets 

    def _add_verbs(self, word): 
     verbs = set([Word(w, "V") for w in self._find_verbs(word)]) 
     self.blackboard.pool.verbs[word] = list(verbs) 
     return verbs 

    '''Adding nouns for adjectives to pool''' 

    def _add_comparisons(self, adj): 

     comparisons = set([Word(w, "N") for w in self._find_comparisons(adj)]) 
     self.blackboard.pool.comparisons[adj] = comparisons 
     return comparisons 

    def __get_best_collocations(self, word, word_bigrams, n=20): 
     words = nltk.ConditionalFreqDist(word_bigrams)[word.name] 
     best_bigrams = sorted(words.items(), key=lambda (k, v): v, reverse=False)[:n] 

     return dict(best_bigrams).keys() 

    def generate_words(self): 
     super(CollocationExpert, self).generate_words() 
     counter = 0 
     for w in self.blackboard.pool.nouns: 
      eps = self._add_epithets(w) 
      vs = self._add_verbs(w) 
      le = len(eps) 
      lv = len(vs) 
      counter += le + lv 
     for adj in self.blackboard.pool.adjectives: 
      comps = self._add_comparisons(adj) 
      counter += len(comps) 
     return counter 

どのようなアイデアですか?私はPythonの初心者ですので、私は本当に結びついていません。ありがとう!

+0

"(以下のすべてがコードとして登録されていない理由は分かっていますが、それはそうです)" =>コードとして表示するためにスペースでテキストをインデントする必要があります。最も簡単な解決策は、コード部分を選択し、エディタのツールバーの "コード"ボタンをクリックすることです。 –

答えて

0

trainメソッドの3行目でエラーが発生しますが、そのエラーをキャッチします。しかし、キャッチではまったく同じことを試してみてください。ファイルを開く方法を変更しても、エラーは省略されません。ファイル/ディレクトリが存在しない場合は、最初に作成する必要があります。

ディレクトリを再帰的に作成する場合は、this questionを参照してください。

ファイルを作成するには、thisが役に立ちます。

関連する問題