我有几个公司发票的文本文件,它们有不同的日期格式
dd/mm/yyyy
mm:dd:yy
dd,monthname,yy
yearname,monthname,dd
诸若此类。有许多独特的模式不能在这里列出。
问题是我一直混合使用正则表达式和(主要) if字符串匹配来查找这些日期,但我确信有更好的方法来识别它们,而不是硬编码程序来查找不同的模式
我也想提取其他特征,如‘总’数量,它也有格式,如
总计123美元
总计123美元
总计$123
总计$123
下面是一些示例文本文件
Demo Company INVOICE
Demo Company Phone : 141-222-3333 Invoice# 1024
1234 Main Street Fax: 222-3984444 Account# C1000
Ashland, KY 41102 Email : sales@example.com
Date 01-08-2009
Due By 02-05-2009
‘Subtotal $212.44
Tax $1.25
Total $213.69
Balance Due $213.69SAMPLE PURCHASE ORDER
ToNGE
Purchase Order Number 2
FROM: Purchase Order Date 6:15:2
Your Company
1122 Cherry Lane
San Diego, CA 92176
1 | MH1000 | MATHOIST STORAGE SYSTEMFOR (@)45°x $8920.00 | $8,920.00
MATS (see product description)
1 [NA Mat Hoist Voltage??? 208V, 230V or 460V Nec Nec
6 |cL7 CL-7 UNIT CLAMP
SA8.75 $292.50123 Anywhere St.
Some City, CA 91000
Phone (555) 555-1212 Fax (555) 555-5555
P.O. NUMBER: 1234
P.O. DATE: 4/15/13
SUBTOTAL $3000
SALES TAX $s 240
TOTAL $3240下面是我用来进行日期提取和整体提取的代码
def extractdate():
with open(inpf, "r") as ifile:
for line in ifile:
if line.startswith("DATE"):
print(next(ifile, '').strip())
elif line.startswith("P.O. DATE"):
if "P.O. DATE" in line:
# print(line)
print('')
elif str("Date") in line:
# print(line)
print('')
elif str("date")in line:
# print(line)
print('')def totalamount():
with open(inpf, "r") as ifile:
for line in ifile:
if 'TOTAL' in line or 'Total' in line:
s = ""
for i in range(len(line)):
if line[i].isdigit():
s += line[i]
elif not line[i].isdigit() and line[i-1].isdigit():
break有没有什么方法可以使用机器学习并训练模型来提取这些特征?
发布于 2019-07-03 01:58:30
这对NLP来说还不是问题。您需要查找两类数据:日期和总金额。有许多用于查找和解析各种日期-时间格式的参考资料;您需要研究这些参考资料,具体取决于您想要使用的解析形式。正则表达式或内置解析包通常是最简单的。
另一个很简单:您正在查找包含单词"total“和一个”$“的行。当这两个都存在于行中时,只需获取与“$”相邻的小数。
考虑到这是已知解决方案的两个问题,使用机器学习有点过头了。
https://stackoverflow.com/questions/56856258
复制相似问题