Как извлечь функции с различными форматами в текстовом файле в Python? - PullRequest
0 голосов
/ 02 июля 2019

у меня есть несколько текстовых файлов счетов-фактур компании, которые имеют различные типы форматов даты

dd/mm/yyyy

mm:dd:yy

dd,monthname,yy

yearname,monthname,dd

и так далее. Theres много уникальных моделей, которые не могут быть перечислены здесь.

Проблема в том, что я использовал сочетание регулярных выражений и (в основном), если еще сопоставление строк, чтобы выяснить эти даты, но я уверен, что есть лучший способ их идентифицировать вместо жесткого кодирования программы для поиска различных шаблонов

Я также хотел бы извлечь другие функции, такие как сумма «ВСЕГО», которая также имеет форматы, такие как

Общая $ 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 $212.44
Tax $1.25
Total $213.69
Balance Due $213.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 $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

Можно ли каким-то образом использовать машинное обучение и обучать модель для извлечения этих функций?

1 Ответ

1 голос
/ 02 июля 2019

Это еще не проблема для НЛП. У вас есть две категории данных для поиска: дата и общая сумма денег. Есть много ссылок для поиска и анализа различных форматов даты и времени; вам нужно исследовать их в зависимости от формы анализа, которую вы хотите использовать. Регулярные выражения или встроенные парсинговые пакеты, как правило, самые простые.

Другой прост: вы ищете строку со словом «итого» и «$». Когда оба из них существуют в строке, просто возьмите десятичную сумму рядом с '$'.

Учитывая, что это две проблемы с известными решениями, использование машинного обучения немного излишне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...