добавление компонента кортежа в виде pos-тегов в список списка кортежей с помощью nltk

#python #list #tags #tuples #nltk

#python #Список #Теги #кортежи #nltk

Вопрос:

Я работаю над распознаванием сущности имени (NER) для распознавания некоторых меток для текста.

Я хочу использовать nltk , и проблема в том, что у меня есть данные в этом формате (список списка кортежей), который в основном выглядит так (4 образца):

 df[0:5]:
[[('Appendix', 'None'), ('B', 'None')],
 [('On', 'None'),
  ('the', 'None'),
  ('Table', 'None'),
  ('of', 'None'),
  ('Oppositions', 'None'),
  ('in', 'None'),
  ('Chapter', 'None'),
  ('15', 'NUM')],
 [('by', 'None'),
  ('Yaakov', 'None'),
  ('Zik', 'None'),
  ('Table', 'None'),
  ('i', 'None')],
 [('Initial', 'None'),
  ('positions', 'None'),
  ('of', 'None'),
  ('Mars', 'None'),
  ('in', 'None'),
  ('Chapter 15 ', 'None'),
  ('computed', 'None'),
  ('with', 'None'),
  ('Guide 9 ', 'None'),
  ('using', 'None'),
  ('JPL', 'GEOM'),
  ('DE430', 'GEOM')],
 [('General', 'None'), ('notes', 'None')]] 
  

Я хочу добавить к каждому кортежу pos_tag без изменения конструкции данных.

Желаемый результат должен быть таким

 [[('Appendix','CS', 'None'), ('B',  'NC', 'None')],
 [('On',  'NC',  'None'),
  ('the',  'NC',  'None'),
  ('Table',  'NC',  'None'),
  ('of', 'Fp' 'None'),
  ('Oppositions','Fp',  'None'),
  ('in', 'Fp' 'None'),
  ('Chapter', 'Fp', 'None'),
  ('15', 'Fp', 'NUM')],
 [('by', 'None'),
  ('Yaakov', 'Fp', 'None'),
  ('Zik', 'None'),
  ('Table', 'Fp', 'None'),
  ('i', 'Fp', 'None')],
 [('Initial', 'Fp', 'None'),
  ('positions', 'Fp', 'None'),
  ('of', 'Fp', 'None'),
  ('Mars', 'Fp', 'None'),
  ('in', 'Fp', 'None'),
  ('Chapter 15 ', 'Z', 'None'),
  ('computed', 'Fp', 'None'),
  ('with', 'Fp', 'None'),
  ('Guide 9 ', 'Fp', 'None'),
  ('using', 'None'),
  ('JPL', 'Fp', 'GEOM'),
  ('DE430', 'Fp', 'GEOM')],
 [('General', 'Z', 'None'), ('notes', ''Fp' 'None')]] 
  

Как указано, я хочу добавить pos-тег в каждый кортеж с помощью nltk.pos_tag(отправлено)

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

Ответ №1:

Ваш вопрос немного расплывчатый, но вот быстрое решение, основанное на моем понимании. Предполагая, что вы хотите сохранить порядок без изменений и хотите вставить элемент в позицию кортежа:

 to_add = '*' # Replace this value with the actual data you want to insert such as pos_tag
position_to_add = 1 # Replace this value with the actual position to insert into

result = []
for lst in df:
    ret_li = []
    for tpl in lst:
        # new_tpl = [*tpl]
        # new_tpl.append('None')
        new_tpl = tuple([*tpl[0:position_to_add]]   [to_add]   [*tpl[position_to_add:]])
        ret_li.append(new_tpl)

    result.append(ret_li)
  

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

1. это отлично работает для добавления постоянного значения! большое спасибо. сейчас я работаю над добавлением этого элемента в каждый кортеж. У меня это есть. Я обновил результат, только последний вопрос: пометка слова, а не предложения с помощью nltk, не влияет на качество тегирования?