首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中提取文本文件中不同格式的特征?

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

Stack Overflow用户
提问于 2019-07-02 23:59:53
回答 1查看 62关注 0票数 0

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

dd/mm/yyyy

mm:dd:yy

dd,monthname,yy

yearname,monthname,dd

诸若此类。有许多独特的模式不能在这里列出。

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

我也想提取其他特征,如‘总’数量,它也有格式,如

总计123美元

总计123美元

总计$123

总计$123

下面是一些示例文本文件

代码语言:javascript
复制
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
代码语言:javascript
复制
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
代码语言:javascript
复制
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

下面是我用来进行日期提取和整体提取的代码

代码语言:javascript
复制
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('')
代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 01:58:30

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

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

考虑到这是已知解决方案的两个问题,使用机器学习有点过头了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56856258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档