Я пытался реализовать Invoice2data, но не могу заставить работать многострочный вариант. Моя секция pdf-элемента выглядит следующим образом (what - это то, что отображается в invoice2data --debug):
Term Product Amount
1 mo Basic Websites Renewal C$99.99
fa6.4bc.myinfo.com
1 mo Renewal Usage C$0.00
Total
Основываясь на документации , я думаю, что yml должен выглядеть примерно так this:
lines:
start: Term\s+Product\s+Amount
end: \s+Total
first_line: \d+\smo
#last_line: .+
line: (?P<term>.+)\s+(?P<product>.+)\s+(?P<amount>\d+\.\d+)
start -> получить заголовок
end -> извлечь слово 'Total'
first_line -> получить '1 мес'
last_line -> это не обязательное, поэтому я просто удалил
строка: честно, эта строка меня смущает. Я копирую / вставляю из do c и пытался запустить его в regexr.com и regex101.com, но оба они не смогли разрешить строку ... Я думаю, что он предполагает использование результата regex '. + 'и поместите его в переменную?
Как видите, вторая строка не всегда появляется. Было бы неплохо сохранить его, но любой ответ помог бы.
Когда я выполняю команду, вот что я получаю:
DEBUG:invoice2data.extract.invoice_template:field=lines | regexp=OrderedDict([('start', 'Term\\s+Product\\s+Amount'), ('end', '\\s+Total'), ('first_line', '\\d+\\smo'), ('line', '(?P<term>.+)\\s+(?P<product>.+)\\s+(?P<amount>\\d+\\.\\d+)')])
Traceback (most recent call last):
File "/home/mr/PycharmProjects/pdf_to_pinv/venv/bin/invoice2data", line 8, in <module>
sys.exit(main())
File "/home/mr/PycharmProjects/pdf_to_pinv/venv/local/lib/python2.7/site-packages/invoice2data/main.py", line 201, in main
res = extract_data(f.name, templates=templates, input_module=input_module)
File "/home/mr/PycharmProjects/pdf_to_pinv/venv/local/lib/python2.7/site-packages/invoice2data/main.py", line 93, in extract_data
return t.extract(optimized_str)
File "/home/mr/PycharmProjects/pdf_to_pinv/venv/local/lib/python2.7/site-packages/invoice2data/extract/invoice_template.py", line 174, in extract
res_find = re.findall(v, optimized_str)
File "/home/mr/PycharmProjects/pdf_to_pinv/venv/lib/python2.7/re.py", line 181, in findall
return _compile(pattern, flags).findall(string)
File "/home/mr/PycharmProjects/pdf_to_pinv/venv/lib/python2.7/re.py", line 237, in _compile
p, loc = _cache[cachekey]
TypeError: unhashable type: 'OrderedDict'
Кто-нибудь знает, как использовать мульти линейная функция?