用于从Wikipedia中的ParserFunctions生成值的Python工具/库

问题描述 投票:0回答:1

给出一段Wikipedia ParserFunction文本,Python中是否有任何工具或库可以从文本生成计算值?例如

>>> parserfunc_2_value('{{#expr: 1/3 round 5 }}')
0.33333
python wikipedia
1个回答
0
投票

[这是#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
© www.soinside.com 2019 - 2024. All rights reserved.