用于从wikipedia中的ParserFunction生成值的Python工具/库

用于从wikipedia中的ParserFunction生成值的Python工具/库,python,wikipedia,Python,Wikipedia,给定一段文本,Python中是否有任何工具或库可以从文本生成计算值?e、 g >>> parserfunc_2_value('{{#expr: 1/3 round 5 }}') 0.33333 下面是一个针对#expr表达式的肮脏解决方案:我发现许多带有“#expr”的表达式与librarymath共享相同的函数名。然后我使用eval通过以下函数获取值: 将wikitextparser作为wtp导入 输入数学 进口稀土 def parserfunc_2_值(val='{{{e

给定一段文本,Python中是否有任何工具或库可以从文本生成计算值?e、 g

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

下面是一个针对
#expr
表达式的肮脏解决方案:我发现许多带有“#expr”的表达式与library
math
共享相同的函数名。然后我使用
eval
通过以下函数获取值:

将wikitextparser作为wtp导入
输入数学
进口稀土
def parserfunc_2_值(val='{{{expr:1/3 round 5}'):
eq=wtp.parse(val).parser_函数[0]。参数[0]。值
过滤器模式=[['([\d\*\/\+\-\s]*)?(圆形| 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)]]
对于ptn,代表过滤器模式:
等式=再分段(ptn、rep、等式)
返回评估(eq)
parserfunc_2_值()
此函数似乎能够处理
#expr
的大多数简单模式,以下是一些示例:

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

下面是一个针对
#expr
表达式的肮脏解决方案:我发现许多带有“#expr”的表达式与library
math
共享相同的函数名。然后我使用
eval
通过以下函数获取值:

将wikitextparser作为wtp导入
输入数学
进口稀土
def parserfunc_2_值(val='{{{expr:1/3 round 5}'):
eq=wtp.parse(val).parser_函数[0]。参数[0]。值
过滤器模式=[['([\d\*\/\+\-\s]*)?(圆形| 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)]]
对于ptn,代表过滤器模式:
等式=再分段(ptn、rep、等式)
返回评估(eq)
parserfunc_2_值()
此函数似乎能够处理
#expr
的大多数简单模式,以下是一些示例:

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

那是。。。真脏。如果您想编写一个合适的解析器,那么MediaWiki代码就是。它非常简单,在Python中复制也不太困难。感谢您的建议,我将尝试在Python中复制它。这就是。。。真脏。如果您想编写一个合适的解析器,那么MediaWiki代码就是。它非常简单,在Python中复制也不太困难。感谢您的建议,我将尝试在Python中复制它。