Распознавание именованных сущностей не в состоянии отображать списки - PullRequest
0 голосов
/ 21 января 2019

Идея состоит в том, что я использую распознавание именованных сущностей (NER) в тексте с токенами, который также помечен.

def make_tag_lists(sents):
    tokens=[]
    pos=[]
    ner=[]
    for sent in sents:
        for t in sent:
            tokens.append(t.text)
            pos.append(t.pos_)
            ner.append(t.ent_type_)
    return tokens,pos,ner

tokens,pos,ner = make_tag_lists(sample)

def extract_entities(tokenlist,taglist,tagtype):
    entities={}
    inentity=False
    for i,(token,tag) in enumerate(zip(tokenlist,taglist)):
        if tag==tagtype:
            if inentity:
                entity+=" "+token
            else:
                entity=token
                inentity=True
        elif inentity:
            entities[entity]=entities.get(entity,0)+1
            inentity=False
    return entities

people=extract_entities(tokens,ner,"PERSON")
top_people=sorted(people.items(),key=operator.itemgetter(1),reverse=True)[:20]
print(top_people)

То, что я должен получить, - это топ-20 наиболее часто упоминаемых людей всписок, хотя мой вывод в настоящее время пустой список.Там нет синтаксических ошибок и не уверен, где я ошибся.

1 Ответ

0 голосов
/ 21 января 2019

Я предлагаю вам попытаться пропустить первый блок вашего кода и проверить оставшийся поток выполнения.

# tokens,pos,ner = make_tag_lists(sample)
tokens = ['Hi','FOO','BAR',"it's",'ME']
ner =['MISC','PERSON','PERSON','MISC','PERSON']
def extract_entities(tokenlist,taglist,tagtype):
    entities={}
    inentity=False
    for i,(token,tag) in enumerate(zip(tokenlist,taglist)):
        if tag==tagtype:
            if inentity:
                entity+=" "+token
            else:
                entity=token
                inentity=True
        elif inentity:
            entities[entity]=entities.get(entity,0)+1
            inentity=False
    return entities

people=extract_entities(tokens,ner,"PERSON")
top_people=sorted(people.items(),key=operator.itemgetter(1),reverse=True)[:20]
print(top_people)

Результат этого примера [('FOO BAR', 1)]. Кроме того, обратите внимание, что вам не хватает последней сущности PERSON, поскольку она не добавлена ​​в словарь entities.

...