Как бороться с разбором произвольного количества списков в словаре - PullRequest
0 голосов
/ 03 мая 2020

Я анализирую структуру данных XMI / XML в pandas фрейме данных, сначала разбив его на словарь. Когда я сталкиваюсь с именованным кортежем в списке в моем XMI, в моем списке появляется максимум два именованных кортежа (хотя у большинства есть только один).

Для обработки этого случая я делаю следующее:

if val is not None and val:
    if len(val) == 1:
        d['modifiedBegin'] = val[0].begin
        d['modifiedEnd'] = val[0].end
        d['modifiedBegin1'] = None
        d['modifiedEnd1'] = None
    else:
        d['modifiedBegin1'] = val[1].begin
        d['modifiedEnd1'] = val[1].end

Мои проблемы с этим: а) я не могу быть уверен, что в моем списке есть только два списка, которые я разлагаю, и б) это кажется дешевым, уродливым и просто неправильным!

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

Мои данные выглядят так:

val = [Span(xmiID=105682, begin=13352, end=13358, type='org.metamap.uima.ts.Span'), Span(xmiID=105685, begin=13368, end=13374, type='org.metamap.uima.ts.Span')]

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

Negation(xmiID=142613, id=None, negType='nega', negTrigger='without', modifier=[Span(xmiID=105682, begin=13352, end=13358, type='org.metamap.uima.ts.Span'), Span(xmiID=105685, begin=13368, end=13374, type='org.metamap.uima.ts.Span')]) 

Итак, обе строки имеют атрибуты negType и negTrigger ... что более важно общий способ разложить это, чтобы вставить в мой dataframe. Хотя я итерировал элементы, когда длина списка была больше единицы, а затем вставлял их в кадр данных на каждой итерации, но это выглядит грязно.

Таким образом, мой желаемый результат - иметь кадр данных, который выглядит лайк (минус индексы и прочее общее барахло):

enter image description here

1 Ответ

0 голосов
/ 03 мая 2020
  • Итерация по Negation namedtuples
    • для каждой вещи в negation.modifier
      • добавление строки с использованием атрибутов отрицания и атрибутов вещей

Или вместо разбора XML на именованные записи в словарях пропустите среднюю часть и создайте один словарь - {'begin':[row0,row1,...],'end':[row0,row1,...],'negtrigger':[row0,row1,...],'negtype':[row0,row1,...]} - из XML

...