如何在python的文本文件中提取不同格式的特征?

How to extract features with different formats in a text file in python?

我有几个公司发票的文本文件,它们具有不同类型的日期格式

dd/mm/yyyy

mm:dd:yy

dd,monthname,yy

yearname,monthname,dd

等等。 还有很多独特的图案不能在这里列出。

问题是我一直在混合使用正则表达式和(主要是)if else 字符串匹配来找出这些日期,但我确信有更好的方法来识别它们,而不是对程序进行硬编码以找到不同的模式

我还想提取其他功能,例如 'TOTAL' amount 其格式也类似于

总计 $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 2.44
Tax .25
Total 3.69
Balance Due 3.69

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 20.00 | ,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 2.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 00
SALES TAX $s 240
TOTAL 40

这是我用于日期提取和总提取的代码

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

有什么方法可以使用机器学习和训练模型来提取这些特征?

这对 NLP 来说还不是问题。您需要查找两类数据:日期和总金额。有很多查找和解析各种 date-time 格式的参考资料;您需要研究这些,具体取决于您要使用的解析形式。正则表达式或 built-in 解析包通常是最简单的。

另一个很简单:您要查找包含单词 "total" 和“$”的一行。当这两个都存在于行中时,只需获取与“$”相邻的十进制数。

鉴于这是已知解决方案的两个问题,使用机器学习有点矫枉过正。