Как найти начальную и конечную позицию слова из заданной строки

import spacy, json, re
nlp = spacy.load('en')
string = u'People of India such as Narendra Modi and Abdul Kalam stand shoulder to shoulder for 3 hours with those affected due to natural disasters and the tragedy in Gorakhpur. Narendra Modi is PM of India. Ganga River is what India is known for'
doc = nlp(string)
a = {}
b = {}
input = u'person'
input = input.upper()
input = input.split()

for entity in input:
    print entity
    entity_list = []
    for ent in doc.ents:
        entityObj = {}
        for w in re.finditer(ent.text,string):
            if entity in ent.label_:
                print entity," : ", ent.text
                start = w.start()
                end = w.start() + len(ent.text)
                print start, ":", end
                entityObj.update({u'token':ent.text})
                entityObj.update({u'start': start})
                entityObj.update({u'end': end})
                entity_list.append(entityObj)
    b.update({entity: entity_list})
    a.update({u'entities':b})

распечатать

Когда я запускаю код, я получаю вывод: ЧЕЛОВЕК: Нарендра Моди 24: 37 ЧЕЛОВЕК: Нарендра Моди 168: 181 ЧЕЛОВЕК: Абдул Калам 42: 53 ЧЕЛОВЕК: Нарендра Моди 24: 37 ЧЕЛОВЕК: Нарендра Моди 168: 181

{u'entities ': {u'PERSON': [{u'start ': 168, u'token': u'Narendra Modi ', u'end': 181}, {u'start ': 168, u' токен ': u'Narendra Modi', u'end ': 181}, {u'start': 42, u'token': u'Abdul Kalam', u'end': 53}, {u'start': 168, u'token ': u'Narendra Modi', u'end ': 181}, {u'start': 168, u'token ': u'Narendra Modi', u'end ': 181}]}}

где я хочу {u'entities ': {u'PERSON': [{u'start ': 168, u'token': u'Narendra Modi ', u'end': 181}, {u'start ': 168, u'ken ': u'Narendra Modi', u'end ': 181}, {u'start': 42, u'token': u'Abdul Kalam', u'end': 53}}

0 ответов

Другие вопросы по тегам