Vam*_*adi 1 javascript regex email parsing signature
我的项目需要解析我到达我的 gmail 帐户的邮件的签名。我必须从签名中获取名字、姓氏、邮件 ID 等 [仅发件人的]。你能告诉我从哪里开始吗?(从某种意义上说,“从哪里开始”,是否已经为此做好了准备?)
我已经解决了这个问题,这个问题是关于删除签名的东西,但这与我的要求完全相反。这个答案并不能解决我的问题。
我知道我可以使用正则表达式来完成这项工作。但我不想错过那些不遵循邮件签名网络礼节的邮件,比如在签名前删除“--”,尾随连字符。
如果可能,请让我知道确切提供此功能的任何开源 javascript 项目。
提前致谢。
更新:我正在寻找的签名通常与业务相关,因此它们包含 HTML 内容或有时直接包含 VCard。
更新:我所需要的只是剥离签名的每一行并从这些行中获取详细信息。
回答这个问题有几个潜在的部分。
Gmail 界面中的签名
在 gmail 界面中,签名相当容易获取。它们包含在 中<font color="#888888">,因此如果您从 gmail 界面中获取签名,那么使用 xmlreader 获取这些签名应该非常容易。这不会得到 gmail 未检测到的任何签名。
使用签名设置从 Gmail 发送的邮件中的签名
只需<div class=3D"gmail_signature">在电子邮件的 html 版本中查找即可。
我随意限制目标为发件人的联系方式。因此,在签名中只获取联系信息是最有意义的。由于许多电子邮件包含发件人以外的其他人的联系信息,因此第一步是隔离签名。
一旦签名被隔离,每一行都可以与正则表达式模式匹配。我绝不是正则表达式专家,因此我不会尝试在此处描述实际模式。
接下来是方法,而不是代码。实际的实现应该非常简单。
从电子邮件中获取签名
现在签名是孤立的。
以下是对剩余部分的一些假设。除非指定了顺序,否则假设它们可以按任何顺序排列。
A) End of message and closing greeting will be the topmost line(s)
B) Name
C) Phone Number
D) Email Address
E) Mailing Address
F) Tag line or witty saying, etc.
Run Code Online (Sandbox Code Playgroud)
1 60 个字符的行长度基于RFC 2822强烈建议行长度应为 78 个字符的事实。Gmail 尊重这一点。大多数签名行会比这更短,除非整个地址写成一行。使用此方法将无法正确检测极短电子邮件(< 20 个字)的签名,但首先检查总邮件长度并使用不同的代码来处理它是微不足道的。
2由于大多数签名是自动添加的,因此在它们之前通常会有一系列换行符。但是,手写签名可能不遵循此模式,因此根据您正在处理的电子邮件类型,您可能会发现此步骤无用或有害。
识别签名的部分
现在您已经降低了正则表达式误匹配的可能性,您可以查看剩余的行是否与您的任何模式匹配。
检查是否有任何行与您的正则表达式模式匹配。如果是这样,请将其从进一步考虑中移除。最难的部分是将名称与其他事物区分开来。建议顺序:
电子邮件
电话
邮政编码(然后是地址,如果您找到邮政编码)
左边应该是结束称呼、名称、标语和上述项目的任何畸形部分。请注意,虽然大多数正则表达式用于查找错误(用于验证),但您希望匹配错误,从进一步处理中删除行,然后验证或规范化。
在我看来,找出哪一部分是最难的部分是区分名称和标签行。以下是一些有助于解决常见情况的建议:
此外,您可以将常见的结束称呼词(真诚地、谢谢、欢呼等)列入黑名单。如果将其缩小为一两行,则上面的很可能是姓名,下面的很可能是标语行.
有关识别名称的更多信息,请参阅使用正则表达式查找名称。请记住,虽然在一般情况下编写解决方案应该很容易,但自然语言处理是巨大的,超出了像我这样的凡人的范围。命名实体识别是一个已知的挑战。希望我所描述的内容在大多数情况下能让您有所收获。