Получение определенного элемента из списка кортежей - PullRequest
0 голосов
/ 09 ноября 2019

При использовании Spacy у меня есть следующее:

import spacy

nlp = spacy.load('en_core_web_lg')

sentence = "a quick John jumps over the lazy dog"

tag_entities = [(x, x.ent_iob_, x.ent_type_) for x in nlp(sentence)]
inputlist = tag_entities

print (inputlist)

[(a, 'O', ''), (quick, 'O', ''), (John, 'B', 'PERSON'), (jumps, 'O', ''), (over, 'O', ''), (the, 'O', ''), (lazy, 'O', ''), (dog, 'O', '')]

Это список кортежей. Я хочу извлечь элемент человека. Вот что я делаю:

for i in inputlist:
  if (i)[2] == "PERSON":
    print ((i)[0])

John

Что может быть лучше? Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Чтобы сохранить все первый элемент, если второй элемент PERSON из первого списка, используйте обозначение для понимания списка с if в конце

filtered_taglist = [x for x,_,type in tag_entities if type == "PERSON"]

Это соответствует

filtered_taglist = []
for x,_,type in inputlist:
    if type == "PERSON":
        filtered_taglist.append(x)
1 голос
/ 09 ноября 2019

Вы можете навязать свои if при создании этого списка:

tag_entities = [(x, x.ent_iob_, x.ent_type_) for x in nlp(sentence) if x.ent_type_ == 'PERSON']

Или вот непосредственно имена:

names = [(x, x.ent_iob_, x.ent_type_)[0] for x in nlp(sentence) if x.ent_type_ == 'PERSON']
...