Как классифицировать/категоризировать строки в соответствии с правилами регулярных выражений в Python

Я пишу 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().

Вот как работают правила классификации:

  • Существует ряд категорий (больше может быть и будет добавлено позже)
  • Каждая категория имеет набор подстрок или регулярных выражений, которые, если журнальный текст транзакции соответствует этому выражению или содержит эту подстроку, то эта транзакция относится к этой категории.
  • Транзакция может относиться только к одной категории.
  • Если категория FOO имеет подстроки «foo» и «Foo», а другая категория BAR имеет подстроки «футбол», то транзакция с Journaltext='food' должна быть помещена в категорию FOO, потому что она соответствует только FOO, а транзакция с Journaltext='футбольные мячи' должна быть помещена в категорию BAR.Я думаю, это означает, что я должен установить приоритет или что-то подобное для каждой категории.
  • Если транзакция не соответствует ни одному из выражений, она либо имеет значение «Нет» в категории, либо будет помещена в категорию-заполнитель под названием «НЕИЗВЕСТНО» или подобную ей. Это не имеет большого значения.

Хорошо. Итак, как представить эти категории и соответствующие правила в Python?

Буду очень признателен за ваш вклад. Даже если вы не можете предоставить полное решение. Просто все, что намекнет мне в правильном направлении, будет здорово. Спасибо.

6
задан ervingsb 8 March 2012 в 19:45
поделиться