Можно ли идентифицировать тег PRP $ и NN pos как NNP в nltk? - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь создать интеллектуальный генератор сертификатов, который будет принимать шаблон сертификата и данные (на данный момент в формате JSON) и генерировать сертификат. Нужно заменить слова типа «Ваше имя» или «_______» на имя в JSON.

Я могу идентифицировать имена людей на изображении и успешно могу заменить их в шаблоне. Моя единственная проблема заключается в том, как заставить мою программу идентифицировать фразы, такие как «ВАШЕ ИМЯ», или подобные слова, например, имя человека (например, я хочу заменить их полем имени в JSON), используя nltk.

Я думал о том, чтобы сделать что-то вроде этого: определить, какие теги pos встречаются до и после «Твоего имени», и, возможно, определить, что находится между этими тегами, как сущность, подлежащую замене, или я могу как-то изменитьярлыки (которые, как я полагаю, я не могу, поскольку они представляют собой кортежи / наборы)

PS: это для хакатона, и у меня не было предшествующего опыта в NLP или nltk, поэтому я делал это в течение последних 7часов, и я много гуглил, но не мог найти ничего удовлетворительного или чего-то, что я мог бы понять за короткий промежуток времени без необходимости изучать весь НЛП.

import nltk
from nameparser.parser import HumanName

def get_human_names(text):
    tokens = nltk.tokenize.word_tokenize(text)
    pos = nltk.pos_tag(tokens)
    print(pos)
    sentt = nltk.ne_chunk(pos, binary = False)
    person_list = []
    person = []
    name = ""
    for subtree in sentt.subtrees(filter=lambda t: t.label() == 'PERSON'):
        for leaf in subtree.leaves():
            person.append(leaf[0])
        if len(person) > 1: #avoid grabbing lone surnames
            for part in person:
                name += part + ' '
            if name[:-1] not in person_list:
                person_list.append(name[:-1])
            name = ''
        person = []

    return (person_list)

text = """
This is to certify that John Doe has been awarded with a random certification from a 
random institution
"""

names = get_human_names(text)
for name in names: 
    first_last = HumanName(name).first + ' ' + HumanName(name).last
    print(first_last)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...