Преобразование данных списка в формат CoNLL 2003 NER и сохранение его в текстовом файле

#python #tagging #named-entity-recognition

#python #тегирование #распознавание именованных объектов

Вопрос:

У меня есть более ТОЧНЫЕ данные в формате списка.

Пример данных:

 [[('Silica', 'NN', '_', 'B-Material'),
  ('nanoparticles', 'NNS', '_', 'I-Material'),
  ('possessing', 'VBG', '_', 'O'),
  ('three', 'CD', '_', 'B-Data'),
  ('different', 'JJ', '_', 'I-Data'),
  ('diameters', 'NNS', '_', 'I-Data'),
  ('(', '(', '_', 'I-Data'),
  ('23', 'CD', '_', 'I-Data'),
  (',', ',', '_', 'I-Data'),
  ('74', 'CD', '_', 'I-Data'),
  ('and', 'CC', '_', 'I-Data'),
  ('170', 'CD', '_', 'I-Data'),
  ('nm', 'NN', '_', 'I-Data'),
  (')', ')', '_', 'I-Data'),
  ('were', 'VBD', '_', 'O'),
  ('used', 'VBN', '_', 'O'),
  ('to', 'TO', '_', 'O'),
  ('modify', 'NN', '_', 'B-Process'),
  ('a', 'DT', '_', 'B-Material'),
  ('piperidine', 'NN', '_', 'I-Material'),
  ('-', ':', '_', 'I-Material'),
  ('cured', 'VBN', '_', 'I-Material'),
  ('epoxy', 'NN', '_', 'I-Material'),
  ('polymer', 'NN', '_', 'I-Material'),
  ('.', '.', '_', 'O')],
 [('Fracture', 'NN', '_', 'B-Process'),
  ('tests', 'NNS', '_', 'I-Process'),
  ('were', 'VBD', '_', 'O'),
  ('performed', 'VBN', '_', 'B-Process'),
  ('and', 'CC', '_', 'O'),
  ('values', 'NNS', '_', 'B-Data'),
  ('of', 'IN', '_', 'I-Data'),
  ('the', 'DT', '_', 'I-Data'),
  ('toughness', 'NN', '_', 'I-Data'),
  ('increased', 'VBN', '_', 'B-Process'),
  ('steadily', 'RB', '_', 'I-Process'),
  ('as', 'IN', '_', 'O'),
  ('the', 'DT', '_', 'B-Data'),
  ('concentration', 'NN', '_', 'I-Data'),
  ('of', 'IN', '_', 'O'),
  ('silica', 'NN', '_', 'B-Material'),
  ('nanoparticles', 'NNS', '_', 'I-Material'),
  ('was', 'VBD', '_', 'O'),
  ('increased', 'VBN', '_', 'B-Process'),
  ('.', '.', '_', 'O')]]
  

Мне нужно преобразовать его в формат данных CoNLL-2003 NER и сохранить в текстовом файле. Мой реализованный код работает не так, как ожидалось. Моя реализация:

 name= 'coll2003_train_com.txt'
def data_format(name, seq):
    test = []
    for i in seq:
        for j in i:
            test.append(j)
    with open(name, 'w', encoding="utf-8") as f1:
        for i in test:
            ii='t'.join(i)
            f1.writelines(ii   '/n')
            #f1.writelines('/n')
    return test

m=data_format(name, cc1)
  

Результаты сохраняются в текстовом файле в одном предложении, а не в отдельных строках.

Комментарии:

1. Каким будет ожидаемый результат, пожалуйста, добавьте пример.

Ответ №1:

Попробуйте это :

 In [9]: fp = open(name, 'w')                                                                                                                  

In [10]: for i in data: 
...:     for j in i: 
...:         fp.write('t'.join(list(j)) 'n') 
...:                                                                                                                                      

In [11]: fp.close()