【发布时间】:2019-05-08 13:23:40
【问题描述】:
我已经从电子邮件正文中提取了一些与发票相关的信息到 Python 字符串中,我的下一个任务是从字符串中提取发票编号。 电子邮件的格式可能会有所不同,因此很难从文本中找到发票编号。我还尝试了 SpaCy 的“命名实体识别”,但由于在大多数情况下,发票编号来自标题“发票”或“发票#”的下一行,因此 NER 不理解该关系并返回不正确的详细信息。
以下是从邮件正文中提取的两个文本示例:
示例 - 1.
Dear Customer:
The past due invoices listed below are still pending. This includes the
following:
Invoice Date Purchase Order Due Date Balance
8754321 8/17/17 7200016508 9/16/18 140.72
5245344 11/7/17 4500199620 12/7/18 301.54
We would appreciate quick payment of these invoices.
示例 - 2.
Hi - please confirm the status of below two invoices.
Invoice# Amount Invoice Date Due Date
7651234 $19,579.06 29-Jan-19 28-Apr-19
9872341 $47,137.20 27-Feb-19 26-Apr-19
我的问题是,如果我将整个文本转换为单个字符串,则会变成这样:
Invoice Date Purchase Order Due Date Balance 8754321 8/17/17
7200016508 9/16/18 140.72
可以看出,发票编号(在本例中为 8754321)改变了位置,不再跟随关键字“发票”,这更难找到。
我想要的输出是这样的:
Output Example - 1 -
8754321
5245344
Output Example - 2 -
7651234
9872341
我不知道如何检索关键字“发票”或“发票#”下的文本,即发票编号。
如果需要更多信息,请告诉我。谢谢!!
编辑:发票号码没有任何预定义的长度,它可以是 7 位或更多位。
【问题讨论】:
-
你试过regex吗?是否所有发票编号都是 7 位数字且没有其他数据与此匹配?熊猫也可能是替代品
-
抱歉,我已经编辑了这个问题,在给定的 2 个示例中,它是一个 7 位数字,但实际上它可以有 7 位以上的数字。邮件正文上还有其他数字,例如 PO 编号、客户 ID、帐号。等
-
蛮力将遍历行,使用查找字符串方法查找“发票”的索引,然后为后续行获取从该索引开始的数字(正则表达式或拆分行拼接)。需要小心额外的“发票”。如果您可以隔离表格,(它们总是用行空间分隔吗?)然后将表格喂给熊猫或类似的东西可能会更容易。如果文本被编辑,你能反馈到 spacy(不熟悉这个)吗?如果是这样,可以用上面的关键字加上空格替换每个数字,然后再输入数字并再次输入 NER。
-
另一个可能的启发是,它看起来像列标题行总是驼峰式或大写字母 (ID)。可以对此进行测试以及是否包含“发票”以获取表格起始行
标签: python information-extraction