用Python从文本到结构化数据的信息提取

时间:2014-03-24 08:15:03

标签: python information-extraction

我接近编程的局外人,只是对它感兴趣。 我在一家船舶经纪公司工作,需要匹配不同的职位(哪些船将在何时何地开放)和订单(在哪里,什么样的工作岗位需要什么样的船舶)。 我们通过电子邮件向我们的负责人和联合经纪人发送和接收此类信息(职位和订单)。 每天有成千上万的此类电子邮件。 我们通过手动阅读电子邮件来进行匹配。

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

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

==>我的问题是如何使用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提取信息并将其放入结构化数据中? 假设我已将所有电子邮件内容放入文本文件中。 感谢。

1 个答案:

答案 0 :(得分:1)

以下是一种可能的方法:

第1步:使用邮件中的主题和/或邮件对邮件进行分类。

正如您所述,一类是邮件请求位置,另一类是订单邮件。 机器学习可用于分类。您可以使用以前的邮件集作为训练语料库。您可以考虑在Python中使用NLTK(Natural Langauage Toolkit)。 Here是使用NLTK进行文本分类的链接。

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

为了使解决方案更有效,您可以考虑为active learning实施选项 (即,如果在邮件中发现了一个未在任何列表中找到的标签,则提示用户。例如,在邮件中,如果使用"accnt",则不会解决,因此应提示用户询问它落下的类别。)

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

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