4

我几乎完全是编程的局外人,只是对它感兴趣。我在一家船舶经纪公司工作,需要在职位(哪艘船将在何时何地开放)和订单(在何时何地需要什么样的船进行什么样的工作)之间进行匹配。我们通过电子邮件向我们的委托人和联合经纪人发送和接收此类信息(头寸和订单)。每天有数千封这样的电子邮件。我们通过手动阅读电子邮件来进行匹配。

我想构建一个应用程序来为我们进行匹配。

这个应用程序的一个重要部分是从电子邮件文本中提取信息。

==> 我的问题是如何使用 Python 将非结构化信息提取到结构化数据中。

订单邮件示例[括号内有注释,但不包含在邮件中]:

Email Subject: 20k dwt requirement, 20-30/mar, Santos-Conti

    Content: 
    Acct ABC [Account Name]
    Abt 20,000 MT Deadweight [Size of Ship Needed]
    Delivery to make Santos [Delivery Point/Range, Owners will deliver the ship to Charterers here]
    Laycan 20-30/Mar [Laycan (the time spread in which delivery can be accepted]
    1 time charter with grains [What kind of Empolyment/Trade, Cargo]
    Duration about 35 days [Duration]
    Redelivery 1 safe port Continent [Redelivery Point/Range, Charterers will redeliver the ship back to Owners here.]

    Broker name/email/phone...

End Email

上面相同的电子邮件可以用许多不同的方式编写——有些写在一行中,有些使用 l/c 而不是laycan ......还有一些包含船舶名称、开放港口、日期范围、船舶载重和其他规格的职位的电子邮件。

如何使用 Python 提取信息并将其放入结构化数据中?假设我已将所有电子邮件内容放入文本文件中。谢谢。

4

1 回答 1

1

以下是一种可能的方法:

第 1 步:使用邮件中的主题和/或消息将邮件分类。

正如您所说,一类是请求职位的邮件,另一类是订单邮件。 机器学习可用于分类。您可以使用一组以前的邮件作为训练语料库。您可能会考虑为 Python 使用 NLTK(自然语言工具包)。是使用 NLTK 进行文本分类的链接。

第 2 步:一旦将电子邮件识别为订单邮件,对其进行处理以获取详细信息(帐户名称、大小、时间差等)。正如您所提到的,这里的挑战是这些数据没有固定的格式。为了解决这个问题,您可以考虑为每个标签准备一个详尽的同义词列表(例如,该列表可能类似于['acct', 'a/c', 'account', 'acnt'])。这应该通过固定数量的先前邮件完成一次。

为了使解决方案更有效,您可以考虑实施主动学习选项 (即,如果在邮件中找到在任何列表中都没有的标签,则提示用户。例如在邮件中,如果"accnt"使用,则不会解决,因此应该提示用户询问它属于哪个类别。)

识别标签后,您可以使用基本的字符串操作来解析电子邮件,以获取结构化格式的相关数据。

您可以参考讨论以获得更好的理解。

于 2014-03-24T09:55:02.703 回答