按照原始字符串解决,从mongodb到python,但是使用parse_latex的新问题

发布于 2025-02-07 05:44:25 字数 2119 浏览 1 评论 0原文

我从mongodb查询中得到关注为字符串:

1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}'

喜欢将其等同于

expression = '1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}'

表达 转换为Sympy表达式 有了

expression_fin = parse_latex(expression)

但是我遇到了错误,因为这不是

我尝试的原始字符串:

expression1=f'{expression}'
expression = repr('1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}')

两种尝试都无法使用 请帮忙 编辑:

    def step_exec(step_id, part_req):
    print('printing here')
    newEq=repr(part_req['extras'][0]['fn_e8wgwASbHjuLR7Mb6mH2pC'])
    print(newEq)
    # rawtest = r'%s' % newEq

    rawtest = parse_expr(newEq, evaluate=False)
    sympy_inputFrom_parse_expr=parse_latex(rawtest)
    print('sympy_inputFrom_parse_expr',sympy_inputFrom_parse_expr)
    latex_inputFromSympy=latex(sympy_inputFrom_parse_expr)
    print('latex_inputFromSympy',latex_inputFromSympy)
    print(latex_inputFromSympy == part_req['extras'][0]['fn_e8wgwASbHjuLR7Mb6mH2pC'])

    pprint.pprint(part_req['extras'][0]['fn_e8wgwASbHjuLR7Mb6mH2pC'])

    print('raw here')
    rawRstring=r'1200*\frac{1-{(\frac{1}{1+0.1259})^{12}}}{0.11917}'
    print('rawRstring',rawRstring)
    parsLatToSympy = parse_latex(rawRstring)
    print('parsLatToSympy',parsLatToSympy)
    SympyTOlatex=latex(parsLatToSympy)
    print('SympyTOlatex',SympyTOlatex)
    print('latex_inputFromSympy', latex_inputFromSympy)

    return step_id

结果:

printing here

'1200*\ frac {1 - {(\ frac {1}

{1 + 0.1259}) ** 12)/0.11917)

latex_inputfromsympy 1200 \ frac {1 - \ frac {1} {\ left(0.1259 + 1 \ right)^{12}}}}}}}} {0.11917} {0.11917}

*

false'1200 frac {1} {1+0.1259})^{12}}}} {0.11917}'

raw

rawRstring 1200*\ frac {1 - {(\ frac {1} {1} {1+0.1259}}}}}}}}}}}}}}}} 0.11917}

parslattosympy 1200*(((1-1/(0.1259 + 1)** 12

) } {0.11917}

latex_inputfromsympy 1200 \ frac {1 - \ frac {1} {\ left(0.1259 + 1 \ right)^{12}}}}}} {0.11917

} 请帮忙

i am getting following as string from MongoDB query:

1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}'

like to take it to equate to expression

expression = '1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}'

then
convert to sympy expression
with

expression_fin = parse_latex(expression)

but I got errors as this is not a raw string

I tried the following:

expression1=f'{expression}'
expression = repr('1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}')

both attempts does not works
please help if any
Edited:

    def step_exec(step_id, part_req):
    print('printing here')
    newEq=repr(part_req['extras'][0]['fn_e8wgwASbHjuLR7Mb6mH2pC'])
    print(newEq)
    # rawtest = r'%s' % newEq

    rawtest = parse_expr(newEq, evaluate=False)
    sympy_inputFrom_parse_expr=parse_latex(rawtest)
    print('sympy_inputFrom_parse_expr',sympy_inputFrom_parse_expr)
    latex_inputFromSympy=latex(sympy_inputFrom_parse_expr)
    print('latex_inputFromSympy',latex_inputFromSympy)
    print(latex_inputFromSympy == part_req['extras'][0]['fn_e8wgwASbHjuLR7Mb6mH2pC'])

    pprint.pprint(part_req['extras'][0]['fn_e8wgwASbHjuLR7Mb6mH2pC'])

    print('raw here')
    rawRstring=r'1200*\frac{1-{(\frac{1}{1+0.1259})^{12}}}{0.11917}'
    print('rawRstring',rawRstring)
    parsLatToSympy = parse_latex(rawRstring)
    print('parsLatToSympy',parsLatToSympy)
    SympyTOlatex=latex(parsLatToSympy)
    print('SympyTOlatex',SympyTOlatex)
    print('latex_inputFromSympy', latex_inputFromSympy)

    return step_id

the result:

printing here

'1200*\frac{1-{(\frac{1}{1+0.1259})^{12}}}{0.11917}'

sympy_inputFrom_parse_expr 1200*((1 - 1/(0.1259 + 1)**12)/0.11917)

latex_inputFromSympy 1200 \frac{1 - \frac{1}{\left(0.1259 + 1\right)^{12}}}{0.11917}

False

'1200*\frac{1-{(\frac{1}{1+0.1259})^{12}}}{0.11917}'

raw here

rawRstring 1200*\frac{1-{(\frac{1}{1+0.1259})^{12}}}{0.11917}

parsLatToSympy 1200*((1 - 1/(0.1259 + 1)**12)/0.11917)

SympyTOlatex 1200 \frac{1 - \frac{1}{\left(0.1259 + 1\right)^{12}}}{0.11917}

latex_inputFromSympy 1200 \frac{1 - \frac{1}{\left(0.1259 + 1\right)^{12}}}{0.11917}

the raw string problem is solved from "parse_expr" but it changes the expression
please help if any

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

可是我不能没有你 2025-02-14 05:44:25

可以通过将字符串文字带有r“”来创建原始字符串。在您的情况下:

from sympy.parsing.latex import parse_latex
r_string = r"1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}"
expression = parse_latex(r_string)
expression

编辑以适应评论。是的,您遇到的好问题:)对于您的特定情况,您冷酷执行此s.Encode('unicode_escape')。decode()。但这很可能会修改后斜线后的角色,因此您还必须执行替换才能使它们回到原始意图。例如:

s = "1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}"
# convert to raw, according to https://stackoverflow.com/a/65380295/2329968
r_string = s.encode('unicode_escape').decode()
# at this point you have a problem: the character inside s following a
# backslash might change to something else. Need to bring it back
r_string_mod = r_string.replace("x0c", "f")
parse_latex(r_string_mod)

Raw string can be created by prefixing a string literal with r"". In your case:

from sympy.parsing.latex import parse_latex
r_string = r"1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}"
expression = parse_latex(r_string)
expression

EDIT to accommodate comment. Yeah, nice problem you have :) For your specific case you cold do this s.encode('unicode_escape').decode(). But this is likely going to modify the characters following backslashes, so you would also have to perform a replacement to bring them back to the original intent. For example:

s = "1000*\frac{1-{(\frac{1}{1+0.1025})^{10}}}{0.09806}"
# convert to raw, according to https://stackoverflow.com/a/65380295/2329968
r_string = s.encode('unicode_escape').decode()
# at this point you have a problem: the character inside s following a
# backslash might change to something else. Need to bring it back
r_string_mod = r_string.replace("x0c", "f")
parse_latex(r_string_mod)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文