Соответствие имени парсера CV - PullRequest
0 голосов
/ 02 марта 2020

Я использую NLP с python, чтобы найти имена из строки. Я могу найти, если у меня есть полное имя (имя и фамилия), но в строке у меня есть только имя, что означает, что мой код не может распознать как Персона. Ниже мой код.

import re
import nltk
from nltk.corpus import stopwords
stop = stopwords.words('english')

string = """
Sriram is working as a python developer 
"""


def ie_preprocess(document):
    document = ' '.join([i for i in document.split() if i not in stop])
    sentences = nltk.sent_tokenize(document)
    sentences = [nltk.word_tokenize(sent) for sent in sentences]
    sentences = [nltk.pos_tag(sent) for sent in sentences]
    return sentences

def extract_names(document):
    names = []
    sentences = ie_preprocess(document)
    #print(sentences)
    for tagged_sentence in sentences:
        for chunk in nltk.ne_chunk(tagged_sentence):
            #print("Out Side ",chunk)
            if type(chunk) == nltk.tree.Tree:

                if chunk.label() == 'PERSON':
                    print("In Side ",chunk)
                    names.append(' '.join([c[0] for c in chunk]))
    return names

if __name__ == '__main__':
    names = extract_names(string)
    print(names) 

1 Ответ

0 голосов
/ 03 марта 2020

Мой совет - использовать StanfordNLP / Spacy NER, так как использование nltk ne chunks немного затянуло. Исследователи чаще используют StanfordNLP, но с Spacy легче работать. Вот пример использования Spacy для печати имени каждого именованного объекта и его типа:

>>> import spacy
>>> nlp = spacy.load('en_core_web_sm')
>>> text = 'Sriram is working as a python developer'
>>> doc = nlp(text)
>>> for ent in doc.ents:
    print(ent.text,ent.label_)


Sriram ORG
>>> 

Обратите внимание, что Sriram классифицируется как организация, что может быть связано с тем, что это не общее имя Engli sh и Spacy обучается на Engli sh corpa. Удачи!

...