Пространство для извлечения адреса электронной почты конкретного человека - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно извлечь адрес электронной почты человека. Я обучил модель NER в Spacy на нескольких примерах, но не повезло. Это должно быть обучено с тысячами примеров, чтобы получить удовлетворительные результаты. Итак, я начал изучать Token Matcher, чтобы получить адрес электронной почты. Кто-нибудь работал над этим раньше? Есть ли лучший подход для этого?

Ответы [ 3 ]

3 голосов
/ 04 апреля 2019

Адреса электронной почты должны быть просты для извлечения - вы можете написать шаблон токена или даже посмотреть на атрибут токена like_email, который вернет True, если он похож на адрес электронной почты.

Чтобы выяснить, как токен адреса электронной почты связан с остальной частью предложения, один из подходов состоит в том, чтобы посмотреть на синтаксис и написать собственную логику извлечения, используя синтаксические зависимости (token.dep_), теги части речи (token.pos_) или поддерево (token.subtree).

Вот пример, демонстрирующий идею:

enter image description here

Адрес электронной почты прикреплен к глаголу "is", который прикреплен к теме предложения "адрес электронной почты". Собственное существительное «Петр» прикреплено к предмету с пометкой poss (притяжательный). Таким образом, владельцем адреса электронной почты является Питер. Если ваши предложения выглядят так, вы можете написать функцию, которая извлекает эту информацию на основе токенов и их отношений.

Конечно, это не всегда так просто - ваши тексты могут выглядеть очень по-разному, и вам, возможно, придется писать логику для различных конструкций. Для получения дополнительной информации и примеров см. Документацию по сочетанию моделей и правил .

0 голосов
/ 04 апреля 2019

Я использовал синтаксические зависимости, чтобы охватить несколько типов правил для идентификации отношений:

см. Код ниже

for email in doc:
        print(email.text, email.dep_, email.ent_type_, email.pos_, email.head)
        if(email.like_email == True):  
            if email.dep_ in ("attr", "dobj", "punct"):
                subject = [w for w in email.head.lefts if w.dep_ == "nsubj" or w.dep_ == "nsubjpass"]
                if subject:
                    subject = subject[0]
                    per = extract_person_names(subject.text)
                    if(per.text != "null"):                       
                        relations.append((per, email))
                    else:
                        print("no entity")
            elif email.dep_ == "pobj" and email.head.dep_ == "prep":
                if ((doc[email.head.i-1]).ent_type_ == 'PERSON'):
                    relations.append((doc[email.head.i-1], email))    
0 голосов
/ 02 апреля 2019

Попробуйте haptik-ner , хотя его использование относится только к чат-ботам, вы также можете использовать код для обнаружения писем.

...