python - 使用 Python 从文本中提取信息到结构化数据

标签 python information-extraction

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

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

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

==> 我的问题是如何使用 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 步:使用邮件中的主题和/或消息对邮件进行分类。

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

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

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

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

可以引用this讨论以便更好地理解。

关于python - 使用 Python 从文本中提取信息到结构化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22604097/

相关文章:

从 HTML 页面中提取文本 block 的 Java 库

python - 具有 '__in' 过滤器性能的 Django ORM values_list

nlp - 信息提取和文本挖掘有什么区别?

mysql - 哪个数据库可以用来存储NLP引擎处理过的数据

parsing - 哪个解析器最适合[生物医学]关系提取?

算法:通过数据库从字符串中提取关键字

python正则表达式问题

python - 如何在python中正确打开文件并打印出文本内容

python - Django 和 mozilla_django_oidc - 如何注销 session ?

python - 如何仅合并 Pandas 中的特定数据框列?