Spacy提取特定人的电子邮件地址

问题描述 投票:0回答:3

我需要提取一个人的电子邮件地址。我已经在Spacy中训练了NER模型,但有一些例子,但没有运气。必须通过数千个示例进行训练才能获得令人满意的结果。所以,我现在开始查看Token Matcher来获取电子邮件地址。有没有人以前做过这个?有更好的方法吗?

nlp spacy
3个回答
3
投票

电子邮件地址应该很容易提取 - 您可以编写令牌模式,甚至可以查看令牌的like_email属性,如果它类似于电子邮件地址,它将返回True

要了解电子邮件地址令牌与句子其余部分的关系,一种方法是查看语法并使用语法依赖关系(token.dep_),词性标记(token.pos_)或子树编写自己的提取逻辑(token.subtree)。

这是一个显示这个想法的例子:

enter image description here

电子邮件地址附在动词“是”上,该动词附在句子“电子邮件地址”的主题上。专有名词“彼得”附有主题,标签为poss(possesive)。所以电子邮件地址的所有者是彼得。如果您的句子看起来像这样,您可以编写一个函数,根据令牌及其关系提取此信息。

当然,它并不总是那么容易 - 你的文本可能看起来非常不同,你可能不得不为各种不同的结构编写逻辑。有关更多信息和示例,请参阅combining models and rules上的文档。


0
投票

试试haptik-ner,虽然它的使用是特定于聊天机器人,你也可以使用代码来检测电子邮件。


0
投票

我使用语法依赖来涵盖几种类型的规则来识别关系:

看下面的代码

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))    
© www.soinside.com 2019 - 2024. All rights reserved.