Слияние тегов в мой файл с использованием аннотации именованного объекта - PullRequest
0 голосов
/ 24 сентября 2019

При изучении основ интеллектуального анализа текста я столкнулся со следующей проблемой: я должен использовать именованную аннотацию сущностей, чтобы найти и найти именованные сущности.Однако при обнаружении тег должен быть включен в документ.Так, например: «Привет, я - Коен» должен привести к «Привет, я - <ЛИЦО> Коен ».

Я понял, как найти и пометить именованные объекты, но я застрял при их получении.в файле правильно.Я попытался сравнить, если в файле есть ent.orth_, а затем заменить его на закрывающий тег tag + ent.orth_ +.

print([(X, X.ent_iob_, X.ent_type_) for X in doc])

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

for ent in doc.ents:
    entities.append(ent.orth_ + ", " + ent.label_)

Я использовал это для создания переменной с исходной формой и надписью.

Прямо сейчас у меня есть переменная со всеми оригинальнымиформы и метки и знают, где сущности начинаются и заканчиваются. Однако, пытаясь как-то заменить его, мои знания заканчиваются и не могут найти аналогичные примеры.

1 Ответ

0 голосов
/ 24 сентября 2019

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

import spacy

nlp = spacy.load("en_core_web_sm")
s ="Apple is looking at buying U.K. startup for $1 billion"
doc = nlp(s)

def replaceSubstring(s, replacement, position, length_of_replaced):
    s = s[:position] + replacement + s[position+length_of_replaced:]
    return(s)

for ent in reversed(doc.ents):
    #print(ent.text, ent.start_char, ent.end_char, ent.label_)
    replacement = "<{}>{}</{}>".format(ent.label_,ent.text, ent.label_)
    position = ent.start_char
    length_of_replaced = ent.end_char - ent.start_char 
    s = replaceSubstring(s, replacement, position, length_of_replaced)

print(s)
#<ORG>Apple</ORG> is looking at buying <GPE>U.K.</GPE> startup for <MONEY>$1 billion</MONEY>


...