Python 如何解析<;等组件的电子邮件文本;敬礼>&书信电报;车身>&书信电报;签名>&书信电报;回复文本>;等

Python 如何解析<;等组件的电子邮件文本;敬礼>&书信电报;车身>&书信电报;签名>&书信电报;回复文本>;等,python,email,email-parsing,email-processing,Python,Email,Email Parsing,Email Processing,我正在编写一个分析电子邮件的应用程序,如果我能使用python库将电子邮件文本解析为命名组件(如等),这将为我节省大量时间 例如,以下文本“嗨,戴夫,\n本周二汤姆·切斯见面\n\n 2011年5月15日星期日下午5:02,戴夫·特林德尔写道:嗨,汤姆,我们在一起怎么样…”将被解析为 Salutation: "Hi Dave,\n" Body: "Lets meet up this Tuesday\n" Signature: "Cheers, Tom\n\n" Reply Text: "On S

我正在编写一个分析电子邮件的应用程序,如果我能使用python库将电子邮件文本解析为命名组件(如
等),这将为我节省大量时间

例如,以下文本“
嗨,戴夫,\n本周二汤姆·切斯见面\n\n 2011年5月15日星期日下午5:02,戴夫·特林德尔写道:嗨,汤姆,我们在一起怎么样…
”将被解析为

Salutation: "Hi Dave,\n"
Body: "Lets meet up this Tuesday\n"
Signature: "Cheers, Tom\n\n"
Reply Text: "On Sunday, 15 May 2011 at 5:02 PM, Dave Trindal wrote: ..."

我知道对于这类问题没有完美的解决方案,但即使是一个具有良好近似性的库也会有所帮助。我在哪里可以找到一个呢?

我想到的第一个方法(不一定是最好的…)是从使用split开始。这里有一些代码和东西

linearray=emailtext.split('\n') 现在您有了一个字符串数组,每个字符串都像一个段落或任何东西

因此linearray[0]将包含称呼

决定回复文本的起始位置有点棘手,我注意到在它前面有一个双换行符,所以可能从后面搜索,希望最后一个指示回复文本的起始位置

或者储存一些你可能期望的签名词,并搜索来自前台的签名词,比如干杯、问候等等

一旦你知道签名在哪里,剩下的就很容易了


希望这对你有所帮助,如果你根据每一行包含的单词类型给每一行打分,你可能会得到一个相当好的提示

例如,在开头附近有问候语的一行是问候语(问候语也可能有表示过去时的短语,例如,上次见到你很高兴)

正文通常包含“电影、音乐会”等词。正文还包含动词(去、跑、走等)以及问号和内容(例如:想、能、应该、喜欢……)。 退房 http://ogden.basic-english.org/

签名将包含结束语

如果您发现一个数据源包含您想要的结构的消息,您可以进行一些频率分析,以查看每个单词在每个部分中出现的频率

每个单词都会得到一个分数[称呼分数,身体分数,签名分数,…] e、 问候在称呼语中可能出现900次,在身体中可能出现10次,在签名中可能出现3次。 这意味着hello将被分配[900,10,3,…] 可能会分配欢呼声[10,3100,…]

现在你将有一个大约500000字的大列表。 范围不大的词是没有用的。 e、 g.捕获量可能为[100101,80..]=范围21 (赶上真是太好了,想去抓条鱼,待会再抓你)。捕获可以发生在任何地方

现在你可以把字数减少到10000个左右

现在,对于每一行,也给该行一个分数,形式为[问候分数,身体分数,签名分数,…]

该分数通过将每个单词的向量分数相加来计算

e、 g.“你好,谢谢你给我你的电话号码”,这句话可以是: [900, 10, 3, ..] + [10,3,100,..] + .. + .. + = [900+10+..,10+3+..,3+100,..] =[1023900500,…]说

然后因为最大的数字是在敬礼分数位置的开头,所以这句话是敬礼

然后,如果你必须为你的一行打分,看看这行应该包含什么成分,那么对于每个单词,你会在分数上加上分数

幸运的是,在计算复杂性和准确性之间总是有一个平衡点。如果你能找到一组好的单词,并为你的计算建立一个好的模型,这将对你有所帮助。


这提供了原始问题中提出的功能,以及对电子邮件区域的公平识别,因为它们通常出现在以英语为母语的人从Outlook和Gmail等常见电子邮件客户端编写的电子邮件中。

我为此构建了一个相当便宜的API,用于解析电子邮件签名和电子邮件链中的联系人数据。它叫做SigParser。你可以看到它的招摇过市的文档

基本上,您向它发送一个标题“x-api-key”,其中包含一个JSON主体,如所示,它解析电子邮件回复链中的所有联系人

{
  "subject": "Thanks for meeting...",
  "from_address": "bgates@example.com",
  "from_name": "Bill Gates",
  "htmlbody": "<div>Hi, good seeing you the other day.</div><div>--</div><div>Bill Gates</div><div>Cell 777-444-8888</div><a href=\"https://www.linkedin.com/in/williamhgates/\">LinkedIn</a><a href=\"https://twitter.com/BillGates\">Twitter</a>",
  "plainbody": "Hi, good seeing you the other day. \r\n--\r\nBill Gates\r\nCell 777-444-8888",
  "date": "Mon, 28 May 2018 23:33:40 +0000 (UTC)"
}
{
“主题”:“感谢您的会见……”,
“发件人地址”:bgates@example.com",
“来自你的名字”:“比尔·盖茨”,
“htmlbody”:“你好,前几天很高兴见到你。--比尔·盖茨塞尔777-444-8888”,
“plainbody”:“你好,前几天很高兴见到你。\r\n--\r\n比尔·盖茨\r\nCell 777-444-8888”,
“日期”:“2018年5月28日星期一23:33:40+0000(UTC)”
}

电子邮件是否采用标准mbox格式?不,目前它们是MySQL表中的文本字段,但在解析之前格式化为mbox格式是一个相当随意的步骤,如果必要的话,不是吗?