我有几个公司发票的文本文件,这些文件具有不同的日期格式
mm:dd:yy
dd,monthname,yy
yearname,monthname,dd
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.69
,依此类推。 有很多无法在此处列出的独特模式。
问题是我一直在使用正则表达式和(大多数情况下)字符串匹配来查找这些日期,但是我敢肯定有一种更好的方法来识别它们,而不是对程序进行硬编码以查找不同的模式
我还想提取其他功能,例如“总计”,也具有类似格式
总计 $ 123
总计$ 123
123美元 总计
总计$ 123
以下是一些示例文本文件
SAMPLE 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.50
123 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
for link in links:
url = link['href'].split('=')
imdb = 'https://www.imdb.com/title/' + url[1]
我可以使用机器学习和训练模型来提取这些特征吗?
答案 0 :(得分:1)
对于NLP来说这还不是问题。您可以找到两类数据:日期和总金额。查找和解析各种日期时间格式的参考文献很多;您需要研究这些内容,具体取决于您要使用的解析形式。正则表达式或内置的解析包通常是最简单的。
另一个很简单:您要查找包含单词“ total”和一个“ $”的行。当这两个都存在时,只需获取“ $”旁边的小数即可。
鉴于这是已知解决方案中的两个问题,使用机器学习有点过分。