как убрать слово которое не является именем человека - PullRequest
0 голосов
/ 23 мая 2018

Я хочу получить имя человека из текстового файла. Я использую nltk, который возвращает имя, а также слово, которое не является именем:

def extract_names(text):
    tokens = nltk.tokenize.word_tokenize(text)
    pos = pos_tag(tokens)
    sentt = 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 + ' '
            name = remove_useless_name(name)
            if name[:-1] not in person_list:
                person_list.append(name[:-1])
            name = ''
        person = []

    return person_list

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

"Sunder Pichai"
"View Profile"
"Risk Management"

пример вывода:

"Sunder Pichai"

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

NLTK предоставляет совокупность наиболее распространенных английских слов (nltk.corpus.words.words('en')) и наиболее распространенных английских имен (nltk.corpus.names.words()).К сожалению, у последнего не будет Sunder или Pichai , поэтому вы должны положиться на первое.К сожалению, есть имена, которые также являются общими английскими словами (например, Hope ), что делает задачу еще более сложной.Вы все еще можете автоматизировать это до некоторой степени:

words = set(nltk.corpus.words.words('en'))

def isname1(string):
    return any([w not in words for w in string.lower().split()])

def isname2(string):
    return all([w not in words for w in string.lower().split()])

list(map(isname1, ["Sunder Pichai", "View Profile", "Risk Management"]))
#[True, False, False]
list(map(isname2, ["Sunder Pichai", "View Profile", "Risk Management"]))
#[False, False, False]

Как вы можете видеть, вторая функция более агрессивна и не распознает «Sunder Pichai» как имя (потому что «sunder» на самом деле является английским словом).

0 голосов
/ 23 мая 2018

Может быть, использовать словарь и проверить, является ли все части имени реальным словом и / или фамилия известна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...