我在Pandas数据框中扼杀了一些词,并具有以下功能:
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
中的最后一个变量计算每秒迭代的平均行数。我想做的是计算每一行的瞬时速率。挑战在于,在我返回词干后,必须定义start
。
我尝试在lambda表达式中定义一个新变量,然后了解到这是不可能的。我知道return [stemmer.stem...], start = time.time()
会在数据框的值中包含start
,这显然是我不想要的。
有办法做到这一点吗?
答案 0 :(得分:0)
我明白了:我可以将词干分配给变量,重新定义start
并使用词干字返回变量:
进度= 0 start = 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)