2017-02-14 13 views
0

Я пытаюсь разобрать некоторые данные и форматировать с помощью nltk, но я не могу присвоить несколько возвратов нескольким переменным в течение итерации функции (см. Функцию def preprocess ниже.) Я попробовал переписать свой код, что обычно приводит к большой отладки, но, похоже, я ударяю головой о стену 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 ключей, но форматирование было раздражающим для тегов POS и т. Д. Для NLTK.

Проблема в этом. Всякий раз, когда я запускаю предварительный процесс, программа сохраняет только 1-й элемент в списке и забывает другой. Я пытаюсь заставить функцию назначить каждый возвращенный вывод списку переменных под названием Дни, но безрезультатно. Я также заметил, что AFTER Days = preprocess(), Days теряет все, кроме первого элемента (со вторника по воскресенье - пустой список из 1 строки). Однако Days [3] или Days [5] корректно печатает ожидаемые данные.

Я ожидаю, что там будет лучший метод представления. Нет сообщений, в которых упоминается об этом, и казалось, что это все равно.

+0

Почему 'return day'? Он будет возвращен после обработки первого элемента, поскольку он находится в цикле for. –

+0

Я вижу вашу мысль. Благодаря! – wip

ответ

1

Всякий раз, когда python видит «return», он говорит: «О, вернитесь, вы должны сделать свой код. Я остановлю функцию сейчас». Таким образом, он останавливается после первой итерации. Вместо того, что вы должны сделать, это:

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

BTW, вместо этого используйте эту идиому: 'tagged_day = [pos_tag (word_tokenize (sent)) для отправленных в sent_tokenize (day.lower())]' – alvas