5

<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: ..."

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

4

4 回答 4

5

https://github.com/Trindaz/EFZP

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

于 2011-05-18T04:13:14.913 回答
3

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

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

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

签名将包含结束词。

如果您找到具有所需结构的消息的数据源,则可以进行一些频率分析,以查看每个单词在每个部分中出现的频率。

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

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

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

现在对于每一行,也给该行打一个分数,形式为 [salutation score, body score, signature score,..]

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

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

那么因为最大的数字在salutation score位置的开头,所以这句话是一个salutation。

那么如果你必须对你的一条线进行评分以查看该线应该在哪个组件中,对于每个单词,你都会添加到它的分数上

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

于 2011-05-17T07:59:38.817 回答
1

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

linearray=emailtext.split('\n') 现在你有一个字符串数组,每个字符串都像一个段落或其他

所以 linearray[0] 将包含称呼

决定回复文本从哪里开始有点棘手,我注意到它之前有一个双换行符,所以可能从后面搜索它并希望最后一个表示回复文本的开始。

或者存储一些你可能期望的签名词并从前面搜索那些,比如欢呼、问候和其他任何东西。

一旦你弄清楚签名在哪里剩下的就很容易了

希望这有帮助

于 2011-05-17T03:58:21.307 回答
0

我为此构建了一个非常便宜的 API,实际上是为了从电子邮件和电子邮件链的签名中解析联系人数据。它被称为 SigParser。您可以在此处查看 Swagger 文档。

基本上,你向它发送一个带有 JSON 正文的标题“x-api-key”,它会解析电子邮件回复链中的所有联系人。

{
  "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)"
}
于 2018-05-29T01:06:53.027 回答