2017-02-14 123 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