调用参数数量未知的函数 Python

GHW*_*WHG 7 python fuzzy-logic scikit-learn

我正在尝试读取模糊纯文本规则并将参数传递给 SciKit-Fuzzy 函数调用以创建模糊规则。例如,如果我在此文本规则中阅读:

IF service IS poor OR food IS rancid THEN tip IS cheap
Run Code Online (Sandbox Code Playgroud)

然后函数调用将是:

ctrl.Rule(service ['poor'] | food ['rancid '], tip ['cheap'])
Run Code Online (Sandbox Code Playgroud)

如果文本规则是:

IF service IS good THEN tip IS average; 
Run Code Online (Sandbox Code Playgroud)

然后函数调用将是:

ctrl.Rule(service ['good '] , tip ['average'])
Run Code Online (Sandbox Code Playgroud)

由于每个规则可以有无限数量的输入变量,例如用户还可以说:

IF service IS good AND food IS good AND mood IS happy THEN tip IS high
Run Code Online (Sandbox Code Playgroud)

其中包含 3 个输入变量service['good']food['good']、和mood['happy']和 1 个输出变量tip['high']。我想不出一种方法来自动读取文本规则并将其转换为函数调用,您有什么想法或建议来实现这个目标吗?任何帮助将不胜感激。谢谢。

And*_*eas 0

你可以尝试这样的事情:

string_input = "IF service IS poor OR food IS rancid THEN tip IS cheap"
string_input = string_input.replace(" THEN ", '"], ').replace(' IS ', '["').strip("IF ").replace(" OR ", '"] | ') +'"]'
eval('ctrl.Rule({})'.format(string_input))
Run Code Online (Sandbox Code Playgroud)

但请注意,您在使用 eval 时需要非常非常小心。这是一个安全风险,因为用户可以通过这种方式执行代码!在使用它之前,您可能会研究如何防止此安全问题。