Я пишу сценарий ETL на Python, который получает данные в файлах CSV, проверяет и очищает данные, а также классифицирует или классифицирует каждую строку в соответствии с некоторыми правилами и, наконец, загружает ее в базу данных postgresql.
Данные выглядят так (упрощенно):
ColA, ColB, Timestamp, Timestamp, Journaltext, AmountA, AmountB
Каждая строка является финансовой транзакцией.
То, что я хочу сделать, это классифицировать или классифицировать транзакции на основе некоторых правил.
Правила в основном представляют собой регулярные выражения, соответствующие тексту в столбце Journaltext.
Так что я хочу сделать что-то вроде этого:
transactions = []
for row in rows:
t = Transaction(category=classify(row.journaltext))
transactions.append(t)
Я не уверен, как эффективно написать функцию classify ().
Вот как работают правила классификации:
- Существует ряд категорий (другие могут быть добавлены позже)
- Каждая категория имеет набор подстрок или регулярных выражений, которые, если Journaltext транзакции соответствует этому выражению или содержит эту подстроку, то эта транзакция принадлежит этой категории.
- Транзакция может быть только в одной категории
- Если категория FOO имеет подстроки 'foo' и 'Foo', а другая категория BAR имеет подстроки 'football', то транзакция с Journaltext = 'food' должна быть помещена в категорию FOO, поскольку она соответствует только FOO , но транзакция с Journaltext = 'footballs' должна быть помещена в категорию BAR. Я думаю, это означает, что я должен поставить приоритет или подобный для каждой категории.
- Если транзакция не соответствует ни одному из выражений, она либо не указана в категории, либо будет помещена в категорию заполнителя с именем «НЕИЗВЕСТНО» или аналогична. Это не имеет большого значения.
Ok. Итак, как мне представить эти категории и соответствующие правила в Python?
Буду очень признателен за ваш вклад. Даже если вы не можете предоставить полное решение. Просто все, что намекнет мне в правильном направлении, будет здорово. Спасибо.