我正在编写一个分析电子邮件的应用程序,如果我可以使用python库将电子邮件文本解析为<salutation><body><signature><reply text>
之类的命名组件,那么这将节省我一些时间。
例如,以下文本“Hi Dave,\nLets meet up this Tuesday\nCheers, Tom\n\nOn Sunday, 15 May 2011 at 5:02 PM, Dave Trindall wrote: Hey Tom,\nHow about we get together ...
”将被解析为
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: ..."
我知道对于这类问题没有完美的解决方案,但即使是一个做出良好近似的库也会有所帮助。我在哪里可以找到一个?
答案 0 :(得分:5)
https://github.com/Trindaz/EFZP
这提供了原始问题中提供的功能,以及电子邮件区域的公平识别,因为它们通常出现在由Outlook和Gmail等常见电子邮件客户端的英语母语人士撰写的电子邮件中。
答案 1 :(得分:3)
如果您根据其中包含的单词类型对每一行进行评分,则可能会得到相当好的指示。
E.G。在开头附近有问候语的一行是称呼(也有称呼可能有短语指的是过去时,例如上次见到你很好)
一个身体通常会包含诸如“电影,音乐会”等词语。它还会包含动词(去,跑,走等)和问题标记和产品(例如,想要,我们可以,我们是否应该更喜欢..)。 查看http://nodebox.net/code/index.php/Linguistics#verb_conjugation http://ogden.basic-english.org/ http://osteele.com/projects/pywordnet/
签名将包含结束语。
如果您发现数据源包含您想要的结构消息,您可以进行一些频率分析,以查看每个单词在每个部分中出现的频率。
每个单词都会得分[称呼分数,身体分数,签名分数......] 例如问候可以在称呼中发生900次,在体内发生10次,在签名中发生3次。 这意味着你好会被分配[900,10,3,..] 欢呼声可能会被分配[10,3,100,..]
现在你将有一个大约500,000字的大型列表。 没有大范围的单词没用。 例如catch可能有[100,101,80 ..] = 21的范围 (赶上去很好,想去抓鱼,后来赶上你)。捕获可以发生在任何地方。
现在,您可以将字数减少到大约10,000
现在对于每一行,给该行一个得分的形式[称呼得分,身体得分,签名得分,......]
这个分数是通过添加每个单词的矢量分数来计算的。
e.g。一句话“你好欢呼给我你的号码”可以是: [900,10,3,..] + [10,3,100,..] + .. + .. + = [900 + 10 + ..,10 + 3 + ..,3 + 100,..] = [1023,900,500,..]说
然后因为最大数字是在称呼分数位置的开头,这句话是一种称呼。
然后,如果你必须对你的一条线进行评分,看看该线应该在哪个组成部分,对于你要在其得分上添加的每个单词
祝你好运,计算复杂性和准确性之间始终存在权衡。如果你能找到一套好的单词,并根据你的计算建立一个好的模型,那将会有所帮助。答案 2 :(得分:1)
首先想到的方法(不一定是最好的......)将首先使用split。这里有一些代码和东西
linearray = emailtext.split( '\ n') 现在你有一个字符串数组,每个字符串都像段落或其他什么
所以linearray [0]会包含称呼
决定回复文本的开始位置有点棘手,我注意到它之前有一个双重换行符,所以可能从后面搜索它,并希望最后一个表示回复文本的开头。
或者存储一些您可能期望的签名词,并搜索前面的那些,如欢呼,问候等等。
一旦你弄清楚签名的位置,其余的就很容易了
希望这有帮助
答案 3 :(得分:0)
我为此实际构建了一个非常便宜的API,用于解析电子邮件和电子邮件链的签名中的联系人数据。它被称为SigParser。您可以看到Swagger文档here。
基本上你发送一个标题&#39; x-api-key&#39;使用像这样的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)"
}