Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python从文本到结构化数据的信息提取_Python_Information Extraction - Fatal编程技术网

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

用Python从文本到结构化数据的信息提取,python,information-extraction,Python,Information Extraction,我几乎完全不懂编程,只是对它感兴趣。 我在一家船舶经纪公司工作,需要在职位(哪艘船在哪里、什么时候开放)和订单(在哪里、什么时候需要什么样的船只从事什么样的工作)之间进行匹配。 我们通过电子邮件向委托人和联合经纪人发送和接收此类信息(头寸和订单)。 每天有数千封这样的电子邮件。 我们通过手动读取电子邮件来进行匹配 我想建立一个应用程序来为我们做匹配 该应用程序的一个重要部分是从电子邮件文本中提取信息 ==>我的问题是如何使用Python将非结构化信息提取到结构化数据中 订单的电子邮件示例[括号中

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

我想建立一个应用程序来为我们做匹配

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

==>我的问题是如何使用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
上述同一封电子邮件可以用多种不同的方式书写——有些用一行书写,有些用信用证而不是laycan。。。 还有关于船名、开放港口、日期范围、船载重量和其他规格的职位的电子邮件

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

以下是一种可能的方法:

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

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

第2步:一旦一封电子邮件被识别为订单邮件,处理它以获取详细信息(帐户名称、大小、时间间隔等)。正如您所提到的,这里的挑战是这些数据没有固定的格式。为了解决这个问题,您可以考虑为每一个标签准备一个完整的同义词列表(例如,对于帐户,列表可能类似于代码> [ ACTT’、‘A/C’、‘帐户’、‘ACNT’)< /代码>。这应该通过查看以前固定数量的邮件来完成一次

<> P>为了使解决方案更有效,可以考虑实现选项 (即,如果在邮件中发现任何列表中都找不到的标签,则提示用户。例如,在邮件中,如果使用了
“accnt”
,则不会解析该标签,因此应提示用户询问该标签属于哪一类。)

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


为了更好地理解,您可以参考讨论。

在尝试解析非结构化邮件这一几乎不可能的任务时,我将我的客户群分为重要客户和非重要客户(重要客户的电子邮件地址列表)。python程序可以监视收件箱,并向每个不重要的客户发送回复,要求他用结构化的数据填写web表单。(您的回复会礼貌地要求这样做以加快速度,您会说,如果他们没有回复,您将手动处理邮件)此回复将包含一个ID。如果邮件中的链接被使用,则邮件将被标记为已处理。@576i我个人喜欢您的想法。但我相信这个问题的目的是要理解,如果邮件被放在文本文件中,Python是如何提供帮助的。@kundan,非常感谢你的建议。机器学习/NTLK/主动学习似乎是解决信息提取挑战的好方法。我会花一些时间来研究它,看看我能用它做些什么。同时,在您最后一行的链接中,Tal Weiss提出了用于半结构化测试的Pyparsing。我发现pyparsing很容易阅读。将从那里开始。@576i,谢谢您的建议。要求我们的交易对手仅根据我们的要求定制他们的电子邮件可能有点困难。但如果所有玩家都使用相同的电子邮件格式,这将节省匹配的时间,人们将关注租船的其他部分。