J'ai besoin d'extraire l'adresse e-mail d'une personne. J'ai formé le modèle NER dans Spacy avec quelques exemples mais pas de chance. Il doit être formé avec des milliers d'exemples pour obtenir des résultats satisfaisants. Donc, j'ai maintenant commencé à regarder Token Matcher pour récupérer l'adresse e-mail. Quelqu'un a-t-il déjà travaillé dessus? y a-t-il une meilleure approche pour cela?
3 Réponses :
Essayez haptik-ner , bien que son utilisation soit spécifique aux robots de chat que vous pourrez peut-être utiliser le code pour détecter les e-mails également.
Merci pour la réponse. J'ai fait la partie extraction en utilisant le Token Matcher de Spacy. J'ai juste besoin d'associer cette adresse e-mail à son propriétaire.
Les adresses e-mail doivent être simples à extraire - vous pouvez écrire un modèle de jeton ou même regarder l'attribut like_email
d'un jeton, qui renverra True
s'il ressemble à une adresse e-mail .
Pour savoir comment le jeton d'adresse e-mail est lié au reste de la phrase, une approche consiste à examiner la syntaxe et à écrire votre propre logique d'extraction en utilisant les dépendances syntaxiques ( token.dep_
) , balises de partie de discours ( token.pos_
) ou sous-arborescence ( token.subtree
).
Voici un exemple qui montre l'idée:
L'adresse e-mail est jointe au verbe «est», qui est joint à l'objet de la phrase «adresse e-mail». Le nom propre "Peter" est attaché au sujet avec l'étiquette poss
(possesive). Le propriétaire de l'adresse e-mail est donc Peter. Si vos phrases ressemblent à ceci, vous pouvez écrire une fonction qui extrait ces informations en fonction des jetons et de leurs relations.
Bien sûr, ce n'est pas toujours aussi simple - vos textes peuvent être très différents et vous devrez peut-être écrire une logique pour différentes constructions différentes. Pour plus d'informations et d'exemples, consultez la documentation sur la la combinaison de modèles et de règles .
J'ai utilisé des dépendances syntaxiques pour couvrir quelques types de règles pour identifier les relations:
voir le code ci-dessous
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))