2016-11-14 13 views
1

次のように私は、CSVファイルの文章を使ってgensimでword2vecモデルを訓練しています:Gensim word2vecオンライントレーニング

import string 
import gensim 
import csv 
import nltk 

path = '/home/neel/Desktop/csci544_proj/test/sample.csv' 
translator = str.maketrans({key: None for key in string.punctuation}) 

class gen(object): 

    def __init__(self, path): 
     self.path = path 

    def __iter__(self): 
     with open(path) as infile: 
      reader = csv.reader(infile) 
      for row in reader: 
       rev = row[4] 
       l = nltk.sent_tokenize(rev) 
       for sent in l: 
        sent = sent.translate(translator) 
        yield sent.lower().split() 

sentences = [path] 
for p in gen(path): 
    model = gensim.models.Word2Vec(p, min_count=1, iter=1) 

print(model.vocab.keys()) 

私は次のような結果を得る: ([ 'B'、 'U'、「Mを'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 'l'])

私が得る結果は言葉ではなく文字です。プログラムはどこが間違っていますか?

+0

可能な重複[更新gensim word2vecモデル](http://stackoverflow.com/questions/22121028/update-gensim-word2vec-model ) – ksindi

答えて

0

は、私はあなたのコード修正

import string 
import gensim 
import csv 
import nltk 

path = '/home/neel/Desktop/csci544_proj/test/sample.csv' 
translator = str.maketrans({key: None for key in string.punctuation}) 

class Generator(object): 
    def __init__(self, pathes): 
     self.pathes = pathes 

    def __iter__(self): 
     for path in self.pathes: 
      with open(path) as infile: 
       for row in csv.reader(infile): 
        for sent in nltk.sent_tokenize(row[4]): 
         yield sent.translate(translator).lower().split() 


corpus = Generator([path]) 
model = gensim.models.Word2Vec(min_count=1, iter=1) 
model.build_vocab(corpus) 
model.train(corpus, total_examples=model.corpus_count, epochs=2) 
model.wv.vocab.keys() 

あなたが得るdict_keys(['wassup', 'where', 'fresh', 'new', 'about', 'juice', 'whats', 'are', 'im', 'hello', 'wtf', 'd', 'hi', 'you', 'world', 'bro', 'friend'])

+0

こんにちは、なぜ何を、なぜあなたはコードを変更するか説明してください。コードについての説明は他のユーザーにも役に立ちます。ありがとう – Maher

関連する問題