Как перебрать файл в python, где записи многострочные с полями, разделенными запятыми, а записи разделены пустой строкой?

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

how,SW
is,SW
the,SW
weather,WTR
?,.
       # blank line
will,SW
it,SW
rain,RAIN
this,ADJ
weekend,TIME
?,.

Я хочу обработать этот входной файл, чтобы получить ожидаемый результат, как показано ниже:

Переменная X должна содержать все слова каждой записи в виде отдельных списков:

[[how, is, the, weather, ?], [will it rain this weekend, ?]]

Переменная Y должна содержать метки каждой записи в виде отдельных списков:

[[SW, SW, SW, WTR, .], [SW, SW, RAIN, ADJ, TIME, .]]

Пожалуйста, предложите. Благодарю вас!


person Vaishnavi Killekar    schedule 27.01.2019    source источник
comment
В одной строке у вас есть только одно слово, пара меток? Или можно больше?   -  person Marcel Preda    schedule 27.01.2019
comment
В конце файла тоже есть пустая строка?   -  person iz_    schedule 27.01.2019
comment
Каждая строка содержит только одну пару слово, метка.   -  person Vaishnavi Killekar    schedule 28.01.2019
comment
Конец файла может быть пустой строкой. Подойдет любой способ, если он облегчает обработку.   -  person Vaishnavi Killekar    schedule 28.01.2019


Ответы (1)


Вероятно, что-то вроде этого будет работать:

Xs = []
Ys = []
with open('file.txt', 'r') as f:
    lines = f.readlines()
i = 0
X = []
Y = []
for line in lines:
    line = line.strip()
    if line == "":
        Xs.append(X)
        Ys.append(Y)
        X,Y = [],[]
    else:
        x,y = line.split(",")
        X.append(x)
        Y.append(y)
Xs.append(X)
Ys.append(Y)
print(Xs)
print(Ys)

#[['how', 'is', 'the', 'weather', '?'], ['will', 'it', 'rain', 'this', 'weekend', '?']]
#[['SW', 'SW', 'SW', 'WTR', '.'], ['SW', 'SW', 'RAIN', 'ADJ', 'TIME', '.']]

Код в основном открывает файл, читает все строки и перебирает строки, чтобы проверить, закончили ли мы импорт записи (как указано пустой строкой), и действовать соответствующим образом. line.strip() удаляет все пробелы из строки, поэтому "\n".strip() выводит "".

person Pablo Melana-Dayton    schedule 27.01.2019