gpt4 book ai didi

python - 如何从多行字符串中提取特定信息

转载 作者:行者123 更新时间:2023-11-28 22:11:11 29 4
gpt4 key购买 nike

我已经从电子邮件正文中提取了一些发票相关信息到 Python 字符串,我的下一个任务是从字符串中提取发票编号。电子邮件的格式可能会有所不同,因此很难从文本中找到发票编号。我还尝试了 SpaCy 的“命名实体识别”,但由于在大多数情况下,发票编号来自标题“发票”或“发票#”的下一行,NER 不理解这种关系并返回不正确的详细信息。

以下是从邮件正文中提取的 2 个文本示例:

示例 - 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

我不知道如何检索关键字“Invoice”或“Invoice#”下的文本,这是发票编号。

如果需要更多信息,请告诉我。谢谢!!

编辑:发票号没有任何预定义的长度,可以是 7 位或更多。

最佳答案

根据我的评论编写代码。

email = '''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.'''

index = -1
# Get first line of table, print line and index of 'Invoice'
for line in email.split('\n'):
if all(x != x.lower() for x in line.split()) and ('Invoice' in line) and len(line) > 0:
print('--->', line, ' --- index of Invoice:', line.find('Invoice'))
index = line.find('Invoice')

使用启发式方法,即列标题行始终为驼峰式或大写字母 (ID)。如果说标题正好是“帐号”,这将失败。而不是“帐号”。

# get all number at a certain index
for line in email.split('\n'):
words = line[index:].split()
if words == []: continue
word = words[0]
try:
print(int(word))
except:
continue

这里的可靠性取决于数据。所以在我的代码中,发票列必须是表头的第一个。即你不能在“发票”之前有“发票日期”。显然这需要修复。

关于python - 如何从多行字符串中提取特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56041885/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com