2011-05-17 63 views
4

我正在写分析电子邮件应用程序,它会为我节省大量的时间,如果我可以使用Python库,将解析电子邮件文本分解成一个名为组件,如<salutation><body><signature><reply text>如何解析电子邮件文本,如<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: ..." 

我知道有这类问题,做很好的近似,将有助于没有完美的解决方案,但即使是库解析。我在哪里可以找到一个?

+1

是标准mbox格式的电子邮件吗? http://docs.python.org/library/mailbox.html – tMC 2011-05-17 01:13:37

+0

号目前他们在一个MySQL表的文本字段,但是格式化成MBOX格式之前,如果需要的话就不会了解析将是一个非常随意的一步? – Trindaz 2011-05-17 01:26:48

回答

4

https://github.com/Trindaz/EFZP

这提供了原来的问题提出的功能,再加上合理的识别电子邮件区域,因为它们通常出现在由普通的电子邮件客户端如Outlook和Gmail英语母语者写电子邮件。

1

想到第一种方法(不一定是最好的......)将是通过使用分割开始。这里的代码之类的东西一点点

linearray = emailtext.split(“\ n”) 现在你有一个字符串数组,每个人就像一个段落或任何

所以linearray [0]将包含致敬

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

或者存储一些您可能期待的签名词,并从前面搜索那些词,如欢呼声,问候等。

一旦你找出其中的签名是剩下的就是剩下的就是容易

希望这有助于

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 (赶上来很好,想要钓到一条鱼,以后再抓到你)。捕捉可能发生在任

现在你可以减少单词的数量减少到约10000

现在每行,给行的得分形式也[称呼得分,比分体,签名比分,..]

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

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

那么因为最大的数字是在开始时的敬语得分位置,这句话是一种称呼。

那么,如果你有得分您的一条线路,看看行应该是什么成分,你会增加其得分

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

相关问题