我的目标是创建N个标签函数( snorkel包中的LFs),使用比一个接一个地编写它更优雅的方法。由于我希望有更多的单一正则表达式被引用,我想找到一种方法来更自动地完成它。下面我介绍一下我的用例。
@labeling_function()
def regex_give(x):
return FEATURE if re.search(r"give", x, flags=re.I) else ABSTAIN
@labeling_function()
def regex_note(x):
return FEATURE if re.search(r"note", x, flags=re.I) else ABSTAIN
@labeling_function()
def regex_pay(x):
return FEATURE if re.search(r"pay", x, flags=re.I) else ABSTAIN
lfs = [regex_give, regex_note, regex_pay]
applier = LFApplier(lfs=lfs)
L_train = applier.apply(df.text)
LFAnalysis(L=L_train, lfs=lfs).lf_summary(df.feat_flg)是否有方法在for循环中或使用任何不同的方法来定义这些标签函数?
发布于 2022-05-26 20:49:15
最简单的方法可能是创建一个工厂函数:
def factory(regex):
@labeling_function()
def regex_labeler(x):
return FEATURE if re.search(regex, x, flag=re.I) else ABSTAIN
return regex_labeler
label_funcs = [factory(i) for i in [r"pay", r"give", r"note"]]这种方法的主要问题是,除非将工厂返回的值分配给一个更有意义的变量,否则函数名就会失去一些可解释性。
give_func = factory(r"give")
# etc...https://stackoverflow.com/questions/72397603
复制相似问题