2017-02-23 24 views
-1

gensimを使用して、ディレクトリにあるサンプルファイルのword2vecモデルを作成しています。私はチュートリアルのオンラインに従いました。チュートリアルでは、ディレクトリ内のファイルを読み取り、それを1行ずつ処理します。私のサンプルファイルには9行あります。しかし、このコードは私の同じ行を9回与えます。誰かが何が起こっているか説明してください。複数回実行するPythonファイルイテレータ

class MySentences(object): 
    def __init__(self, dirname): 
     self.dirname = dirname 

    def __iter__(self): 
     for fname in os.listdir(self.dirname): 
      for line in open(os.path.join(self.dirname, fname)): 
       print os.path.join(self.dirname, fname) 
       yield line.split() 

sentences = MySentences('/fakepath/Folder') 

詳細:一度だけ['hi','how','are','you']: と仮定ファイル名は私を与える必要があります

hi how are you. 
I am fine. 
I am good. 

line.split()のような3行が含まれています。しかし、これは3回起こるので、私は上記のリストを3回ではなく3回取得します。総文章が5の場合、5行目が返されます。

+0

'line.splitで' line'は() 'は何ですか?どのように初期化されますか? – DyZ

+0

ファイル内のすべての行について。それはforループで宣言されています –

+0

だから '' fakepath/filename.txt''は 'dirname'ですか?それはディレクトリ名ではなく、私のファイル名のように見えます。 – DyZ

答えて

0

まず、何をしようとしているのか把握する必要があります。 class MySentencesは、パラメータとしてディレクトリをとり、その中にジェネレータを含むオブジェクトsentencesを作成します。したがって、sentencesには、ディレクトリ内のすべてのファイルのすべての行が含まれています。例えば

for line in sentences: 
    print(line) 

あなたは(私はパスを出力print文を削除した)要素などの単語をリストの多くを得るだろう。これは次のとおりです。

['hi', 'how', 'are', 'you.'] 

['I', 'am', 'fine.']

['I', 'am', 'good.']

+0

はい、上記の3つのリストを6回印刷します。 ['私'、 '午前'、 '良い'] ['私'、 '午前'、 ' 6回印刷されます。 –

+0

'print(os.path.join(self.dirname、fname))'なしで試してみてください。コードは自分のコンピュータで正常に動作します。 – EvanL00

+0

あなたの印刷コードは?私たちにコードを教えてください。 – EvanL00

関連する問題