用于从维基百科中的ParserFunctions生成值的Python工具/库



给定一段维基百科解析函数文本,Python 中是否有任何工具或库可以从文本生成计算值?例如

>>> parserfunc_2_value('{{#expr: 1/3 round 5 }}')
0.33333

这是#expr表达式的肮脏解决方案: 我发现很多带有"#expr"的表达式与库math共享相同的函数名称。然后我使用eval通过以下函数获取值:

import wikitextparser as wtp
import math
import re
def parserfunc_2_value(val='{{#expr: 1/3 round 5 }}'):
eq = wtp.parse(val).parser_functions[0].arguments[0].value
filter_pattern = [['([d*/+-s]*)?(round|div|mod)([d*/+-s]*)',r'2(1,3)'],
['(trunc|abs|exp|ln|sin|cos|tan|acos|asin|atan)([d*/+-s]*)',r'1(2)'],
['ln(([d*/+-s]*))',r'log(1)']]
for ptn,rep in filter_pattern:
eq = re.sub(ptn,rep,eq)
return eval(eq)
parserfunc_2_value()

这个函数似乎能够处理大多数简单的模式#expr,这里有一些例子:

>>> parserfunc_2_value('{{#expr: 1/3 round 5 }}')
0.33333
>>> parserfunc_2_value('{{#expr: 1+4 }}')
5

最新更新