如何解析<salutation> <body> <signature> <reply text>等组件的电子邮件文本?

Tri*_*daz 5 python email email-parsing email-processing

我正在编写一个分析电子邮件的应用程序,如果我可以使用一个将电子邮件文本解析为命名组件<salutation><body><signature><reply text>等的python库,它将节省我一大堆时间.

例如,以下文本" 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: ..."
Run Code Online (Sandbox Code Playgroud)

我知道这种问题没有完美的解决方案,但即使是一个做出良好近似的库也会有所帮助.我在哪里可以找到一个?

rob*_*ing 6

如果您根据每一行包含的单词类型对每一行进行评分,您可能会得到相当好的指示。

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

正文通常包含诸如“电影、音乐会”等单词。它还将包含动词(去、跑、走等)和问号和产品(例如想要、我们可以、我们应该、更喜欢......) 。查看http://nodebox.net/code/index.php/Linguistics#verb_conjugation http://ogden.basic-english.org/ http://osteele.com/projects/pywordnet/

签名将包含结束语。

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

每个单词都会得到一个分数[称呼语分数,正文分数,签名分数,..] 例如,hello 在称呼语中可能出现 900 次,在正文中出现 10 次,在签名中出现 3 次。这意味着 hello 可能会被分配 [900, 10, 3, ..] 欢呼可能会被分配 [10,3,100,..]

现在您将拥有大约 500,000 个单词的大列表。范围不大的单词是没有用的。例如,catch 可能有 [100,101,80..] = 21 的范围(赶上很好,想去抓鱼,稍后再抓你)。catch 可能发生在任何地方。

现在您可以将字数减少到大约 10,000

现在,对于每一行,给该行一个同样形式的分数 [称呼分数,正文分数,签名分数,..]

该分数是通过添加每个单词的向量分数来计算的。

例如,句子“你好,欢呼给我你的电话号码”可以是: [900, 10, 3, ..] + [10,3,100,..] + .. + .. + = [900+10+.., 10+3+..,3+100,..] =[1023,900,500,..] 说

那么因为最大的数字在称呼语分数位置的开头,所以这句话是称呼语。

那么如果你必须对其中一行进行评分才能查看该行应该属于哪个组成部分,那么对于每个单词,你将在其分数上添加

祝你好运,计算复杂性和准确性之间总是需要权衡。如果你能找到一组好的单词并建立一个好的模型来作为计算的基础,这将会有所帮助。


Tri*_*daz 5

https://github.com/Trindaz/EFZP

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