2017-07-13 5 views
1

私はパンダのデータフレームにいくつかの単語を語幹と、以下の機能を持っていた後、関数内で変数を定義する:リターン

progress = 0 

def stem(x): 
    end = time.time() 
    tokens = word_tokenize(x) 
    global progress 
    progress += 1 
    sys.stdout.write('\r {} percent, {} position, {} per second '.format(float(progress/len(articles)), 
                  progress, progress/(end - start))) 

    return [stemmer.stem(e) for e in tokens] 

私はその関数を呼んでいる方法は、このようなものです:

start = time.time() 
articles['stems'] = articles.content.apply(lambda x: stem(x)) 

articles.contentは大きな文字列の列です。現在書かれているように、sys.stdout.writeの最後の変数は、1秒間に繰り返される平均行数を計算します。私がしたいのは、各行の瞬間速度を計算することです。挑戦は、startは、私が語幹を返した後に定義する必要があるということです。

ラムダ式の中に新しい変数を定義しようとしましたが、それができないことを学びました。そして、私はreturn [stemmer.stem...], start = time.time()がデータフレームの値にstartを含んでいることを知っています。明らかに私は望んでいません。

これを行う方法はありますか?

答えて

0

私はそれを考え出した:私はstartを再定義し、茎言葉で変数を返し、変数に茎の単語を割り当てることができます。

進捗= 0 開始= time.time()

def stem(x): 
    end = time.time() 
    tokens = word_tokenize(x) 
    global start 
    global progress 
    progress += 1 
    stems = [stemmer.stem(word) for word in tokens] 
    end = time.time() 
    sys.stdout.write('\r {} percent, {} position, {} per second '.format(str(float(progress/len(articles))), 
                 str(progress), (1/(end - start)))) 
    start = time.time() 
    return stems 

start = time.time() 
stem(strings)