2017-02-14 71 views
0

我想解析一些数据和格式使用nltk,但我似乎无法通过函数迭代分配多个返回多个变量(请参阅下面的def预处理函数。)我试着重写我的代码,这通常会导致大的调试,但似乎我正在碰撞一个故意在那里的Python墙。分配多个返回变量,但一次一个?

def get_7text(): 
    with open('parsed_text/Larrys Pizza & Sports Parlor_text.csv','r') as file: 
     reader = csv.reader(file) 
     dict = [row for row in reader] 
    file.close() 

    my_dict = [l[0] for l in dict] 
    text= my_dict[0] 
    new_dict=ast.literal_eval(text) 
    for k,v in new_dict.items(): 
     exec(k + '=v') 
    return Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday 

def preprocess(): 
    for day in Days: 
     day = str(day) 
     day = sent_tokenize(day) 
     day = [word_tokenize(s.lower()) for s in day] 
     day = [pos_tag(s) for s in day] 
     return day 

#code here 
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday = get_7text() 
Days=[Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday] 
Days=preprocess() 

Get7text()返回7个字符串,我可以成功地分配。我曾经首先让它返回7个键的字典,但格式化对于NLTK的POS标记等是烦人的。

问题是这样的。每当我运行预处理,程序只保留列表中的第一个项目,并忘记其他6.我试图强制该函数将每个返回的输出分配给名为Days的变量列表,但无济于事。我还注意到,在天数=预处理()之后,天除了第一个元素(周二到周日是1个字符串的空列表)之外都会丢失。但是,Days [3]或Days [5]会正确打印预期数据。

我期待有更好的表示方法。网上没有帖子提及它,反正它似乎是一个粗略的事情。

+0

为什么'回归日'?它将在处理第一个元素后返回,因为它位于for循环中。 –

+0

我明白你的观点。谢谢! – wip

回答

1

每当python看到“返回”时,它会说:“哦,返回,您必须完成您的代码,现在我将停止此功能。”因此,它在第一次迭代之后停止。相反,你应该做的是:

def preprocess(): 
     retList = [] 
     for day in Days: 
      day = str(day) 
      day = sent_tokenize(day) 
      day = [word_tokenize(s.lower()) for s in day] 
      day = [pos_tag(s) for s in day] 
      retList.append(day) 
     return (retList) 

自然,如果这不起作用,那么我错过了一些东西,我们都在亏损。

+0

非常简单的提示。感谢您解决! – wip

+0

不要介意,如果我偷了报价,但从现在起开始学习函数时,这将是我的引用:''哦,回报,你必须用你的代码完成,我现在就停止这个函数。 ; P – alvas

+0

顺便说一句,用这个习惯用法代替:'sent_tokenize(day.lower())]中tagged_day = [pos_tag(word_tokenize(发送))' – alvas

相关问题