Nlp Spacy提取特定人员的电子邮件地址
我需要提取一个人的电子邮件地址。我已经用几个例子在Spacy中训练了NER模型,但是运气不好。为了得到令人满意的结果,必须使用数千个示例对其进行训练。因此,我现在开始研究令牌匹配器来获取电子邮件地址。以前有人做过这个吗?有更好的方法吗?尝试一下,尽管它的用途是特定于聊天机器人的,但您也可以使用代码来检测电子邮件 电子邮件地址应该很容易提取–您可以编写令牌模式,甚至可以查看令牌的Nlp Spacy提取特定人员的电子邮件地址,nlp,spacy,Nlp,Spacy,我需要提取一个人的电子邮件地址。我已经用几个例子在Spacy中训练了NER模型,但是运气不好。为了得到令人满意的结果,必须使用数千个示例对其进行训练。因此,我现在开始研究令牌匹配器来获取电子邮件地址。以前有人做过这个吗?有更好的方法吗?尝试一下,尽管它的用途是特定于聊天机器人的,但您也可以使用代码来检测电子邮件 电子邮件地址应该很容易提取–您可以编写令牌模式,甚至可以查看令牌的like_Email属性,如果它与电子邮件地址相似,则返回True 要了解电子邮件地址标记与句子其余部分的关系,一种方法
like_Email
属性,如果它与电子邮件地址相似,则返回True
要了解电子邮件地址标记与句子其余部分的关系,一种方法是查看语法,并使用语法依赖项(token.dep
)、词性标记(token.pos
)或子树(token.subtree
)编写自己的提取逻辑
下面是一个例子,展示了这个想法:
电子邮件地址附在动词“是”之后,动词“是”附在句子“电子邮件地址”的主语之后。专有名词“彼得”用标签poss
(所有格)附在主语后面。因此,电子邮件地址的所有者是彼得。如果您的句子看起来像这样,您可以编写一个函数,根据标记及其关系提取这些信息
当然,这并不总是那么容易——你的文本可能看起来非常不同,你可能需要为各种不同的结构编写逻辑。有关更多信息和示例,请参阅上的文档。我使用语法依赖关系涵盖了几种类型的规则来识别关系: 请参阅下面的代码
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))
我偶然发现了亚历山大·克罗森关于这个话题的中篇文章 这种基于正则表达式的方法非常适合我(只要电话号码是10位数(没有国家代码))-
谢谢你的回复。我已经使用Spacy的令牌匹配器完成了提取部分。我只需要将此电子邮件地址与其所有者关联。
import re
def get_phone_numbers(string):
r = re.compile(r'(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})')
phone_numbers = r.findall(string)
return [re.sub(r'\D', '', num) for num in phone_numbers]
def get_email_addresses(string):
r = re.compile(r'[\w\.-]+@[\w\.-]+')
return r.findall(string)