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

时间:2019-07-02 15:59:53

标签: machine-learning nlp feature-extraction text-extraction

我有几个公司发票的文本文件,这些文件具有不同的日期格式

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]

我可以使用机器学习和训练模型来提取这些特征吗?

1 个答案:

答案 0 :(得分:1)

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

另一个很简单:您要查找包含单词“ total”和一个“ $”的行。当这两个都存在时,只需获取“ $”旁边的小数即可。

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