Sto scrivendo uno script ETL in Python che ottiene i dati nei file CSV, convalida e disinfetta i dati oltre a classificare o classificare ciascuna riga in base ad alcune regole, e infine lo carica in un database postgresql.Come classificare/categorizzare le stringhe in base alle regole di espressione regolare in Python
I dati si presenta così (semplificato):
ColA, ColB, Timestamp, Timestamp, Journaltext, AmountA, AmountB
Ogni riga è una transazione finanziaria. Quello che voglio fare è categorizzare o classificare le transazioni sulla base di alcune regole. Le regole sono fondamentalmente espressioni regolari che corrispondono al testo nella colonna Journaltext.
Quindi quello che voglio fare è qualcosa di simile:
transactions = [] for row in rows: t = Transaction(category=classify(row.journaltext)) transactions.append(t)
io non sono sicuro di come scrivere la funzione di classificare() in modo efficiente.
In questo modo le regole di classificazione lavori:
- Ci sono una serie di categorie (più può e saranno aggiunti in seguito)
- Ogni categoria ha un insieme di stringhe o espressioni regolari che, se Il testo ufficiale di una transazione corrisponde a questa espressione o contiene questa sottostringa, quindi questa transazione appartiene a questa categoria.
- Una transazione può essere solo su una categoria
- Se una categoria, FOO, ha sottostringhe 'foo' e 'Foo', e un'altra categoria BAR ha sottostringhe 'calcio', quindi una transazione con Journaltext = 'cibo' deve essere inserito nella categoria FOO, perché corrisponde solo a FOO, ma una transazione con Journaltext = 'footballs' deve essere inserita nella categoria BAR. Penso che questo significhi che devo mettere una priorità o simili per ogni categoria.
- Se una transazione non corrisponde a nessuna delle espressioni, è None in category o verrà inserita in una categoria segnaposto denominata "UNKNOWN" o simile. Questo non importa molto.
Ok. Quindi, come rappresento queste categorie e le regole corrispondenti in Python?
Apprezzerei molto il vostro contributo. Anche se non è possibile fornire una soluzione completa. Tutto ciò che mi suggerisce di essere nella giusta direzione sarà fantastico. Grazie.
Quanto grande è il vostro input (numero di categorie, i termini per categorie, numero di transazioni e dimensione media del testo)? –