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

我有几份公司发票的文本文件,这些文件中包含不同种类的日期格式

dd/mm/yyyy

mm:dd:yy

dd,monthname,yy

yearname,monthname,dd

等等。这里无法列出所有独特的模式。

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

我还想提取其他特征,比如‘总计’金额,它也有不同的格式,如

Total$123

Total $123

$123Total

$123 Total

这里是一些示例文本文件

Demo Company INVOICEDemo Company Phone : 141-222-3333 Invoice# 10241234 Main Street Fax: 222-3984444 Account# C1000Ashland, KY 41102 Email : [email protected] Date 01-08-2009Due By 02-05-2009‘Subtotal $212.44Tax $1.25Total $213.69Balance Due $213.69
SAMPLE PURCHASE ORDERToNGEPurchase Order Number 2FROM: Purchase Order Date 6:15:2Your Company1122 Cherry LaneSan Diego, CA 921761 | MH1000 | MATHOIST STORAGE SYSTEMFOR (@)45°x $8920.00 | $8,920.00MATS (see product description)1 [NA Mat Hoist Voltage??? 208V, 230V or 460V Nec Nec6 |cL7 CL-7 UNIT CLAMPSA8.75 $292.50
123 Anywhere St.Some City, CA 91000Phone (555) 555-1212 Fax (555) 555-5555P.O. NUMBER: 1234P.O. DATE: 4/15/13SUBTOTAL $3000SALES TAX $s 240TOTAL $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

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


回答:

这还不是一个需要自然语言处理的问题。你需要找的有两类数据:日期和总金额。有很多关于查找和解析各种日期时间格式的参考资料;你需要根据你想使用的解析形式来研究这些。通常使用正则表达式或内置的解析包是最简单的。

另一个很简单:你要找的是带有“total”字样和“$”符号的行。当这两者都在行中存在时,只需抓取“$”旁边的十进制金额即可。

鉴于这两个问题都有已知的解决方案,使用机器学习有点过火了。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注