首页 > 解决方案 > 用于从维基百科中的 ParserFunctions 生成值的 Python 工具/库

问题描述

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

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

标签: pythonwikipedia

解决方案


这是#expr表达式的肮脏解决方案:我发现很多带有 '#expr' 的表达式与 library 共享相同的函数名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

推荐阅读