标记来自不同嵌套词典的句子

Labeling sentences from different nested dictionaries

我创建了一个函数来从嵌套文件中的特定键中提取句子。现在我想在这个函数中包含一个标签 每次涉及到新字典时。

每次出现 HEADER 值都标志着一个新故事的开始。所以我想标记属于同一个故事的句子。并区分那​​些不同的。

数据如下所示:

sentences = [{'c': 'HEADER', 'a1': {'a': 'Opus dei, la vie en rose.', 'x': 'l'}},
      {'d': 'm', 'a1': {'a': 'Ipsum lorem, Suspendisse posuere.', 'x': '4'}},
      {'c': 'j', 'a1': {'a': 'Nulla elementum, augue fringilla tincidunt ullamcorper.'}},
      {'c':'h', 'b': 'p'},
      {'a1': {'a': 'Ut sollicitudin mauris sem, ut ultricies ante accumsan dictum.'}},
      {'c': 'HEADER', 'a1': {'a': 'NEW Opus dei, la vie en rose.', 'x': 'l'}},
      {'d': 'm', 'a1': {'a': 'NEW Ipsum lorem, Suspendisse posuere.', 'x': '4'}},
      {'c': 'j', 'a1': {'a': 'NEW Nulla elementum, augue fringilla tincidunt ullamcorper.'}},
      {'c':'h', 'b': 'p'},
      {'a1': {'a': 'NEW Ut sollicitudin mauris sem, ut ultricies ante accumsan dictum.'}}]

函数

def prhases_and_labels(data):
    a1 = [d for d in data if 'a1' in d]
    text = []
    for i in a1:
        text.append(i['a1']['a'])
    
    df = pd.DataFrame({'text': text})
    return df

我想获得的结果(标签在新列中)

您可以遍历记录并在每次 c 值为 HEADER 时递增标签。

sentences = [{'c': 'HEADER', 'a1': {'a': 'Opus dei, la vie en rose.', 'x': 'l'}},
      {'d': 'm', 'a1': {'a': 'Ipsum lorem, Suspendisse posuere.', 'x': '4'}},
      {'c': 'j', 'a1': {'a': 'Nulla elementum, augue fringilla tincidunt ullamcorper.'}},
      {'c':'h', 'b': 'p'},
      {'a1': {'a': 'Ut sollicitudin mauris sem, ut ultricies ante accumsan dictum.'}},
      {'c': 'HEADER', 'a1': {'a': 'NEW Opus dei, la vie en rose.', 'x': 'l'}},
      {'d': 'm', 'a1': {'a': 'NEW Ipsum lorem, Suspendisse posuere.', 'x': '4'}},
      {'c': 'j', 'a1': {'a': 'NEW Nulla elementum, augue fringilla tincidunt ullamcorper.'}},
      {'c':'h', 'b': 'p'},
      {'a1': {'a': 'NEW Ut sollicitudin mauris sem, ut ultricies ante accumsan dictum.'}}]


def prhases_and_labels(data):
    label = 0
    res = {'text':[], 'label': []}
    for record in data:
        if 'a1' in record:
            line = record['a1']['a']
            if record.get('c') == 'HEADER':
                label += 1
                
            res['text'].append(line)
            res['label'].append(label)
            
    return pd.DataFrame(res)        

输出:

>>> prhases_and_labels(sentences)

                                                                 text  label
0                                           Opus dei, la vie en rose.      1
1                                   Ipsum lorem, Suspendisse posuere.      1
2             Nulla elementum, augue fringilla tincidunt ullamcorper.      1
3      Ut sollicitudin mauris sem, ut ultricies ante accumsan dictum.      1
4                                       NEW Opus dei, la vie en rose.      2
5                               NEW Ipsum lorem, Suspendisse posuere.      2
6         NEW Nulla elementum, augue fringilla tincidunt ullamcorper.      2
7  NEW Ut sollicitudin mauris sem, ut ultricies ante accumsan dictum.      2