gpt4 book ai didi

python - Python中如何根据正则表达式规则对字符串进行分类/归类

转载 作者:太空狗 更新时间:2023-10-30 00:08:08 25 4
gpt4 key购买 nike

我正在用 Python 编写一个 ETL 脚本,用于获取 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 中。我认为这意味着我必须对每个类别进行优先排序或类似排序。
  • 如果交易不匹配任何表达式,则它在类别中为 None 或将被放入名为“UNKNOWN”或类似名称的占位符类别中。这无关紧要。

好的。那么如何在 Python 中表示这些类别和相应的规则呢?

非常感谢您的意见。即使您不能提供完整的解决方案。任何能提示我正确方向的东西都会很棒。谢谢。

最佳答案

伪 python 中的这个解决方案怎么样:

def classify(journaltext):
prio_list = ["FOO", "BAR", "UPS", ...] # "..." is a placeholder: you have to give the full list here.
# dictionary:
# - key is the name of the category, must match the name in the above prio_list
# - value is the regex that identifies the category
matchers = {"FOO": "the regex for FOO", "BAR": "the regex for BAR", "UPS":"...", ...}
for category in prio_list:
if re.match(matchers[category], journaltext):
return category
return "UNKOWN" # or you can "return None"

特点:

  • 这个有一个prio_list,就是所有的类别降序排列。
  • 它尝试按照列表的顺序进行匹配。
  • 它与匹配器 字典中的正则表达式匹配。所以类别名称可以是任意的。
  • 函数返回类别名称
  • 如果没有匹配项,您将获得占位符类别名称。

您甚至可以从配置文件中读取优先类别列表和正则表达式,但这留给读者作为练习...

关于python - Python中如何根据正则表达式规则对字符串进行分类/归类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com