Инструменты / библиотеки Python для генерации значений из ParserFunctions в Википедии - PullRequest
1 голос
/ 13 октября 2019

Учитывая фрагмент текста Wikipedia ParserFunction , есть ли в Python инструменты или библиотеки для генерации вычисленного значения из текста? например,

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

1 Ответ

0 голосов
/ 13 октября 2019

Вот грязное решение для #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
...