我需要做的就是将String转换为一个简单的对象,如:
"1/4*x+ 1" to 1/4*x+ 1
我从图像中提取文本并计算图像中的表达式。
如果我有:
valid_text = 1/4*x+ 1= 1/6*x+ 1/2
来自图片,我正在做:
if 'x' in valid_text and '=' in valid_text:
lhs = valid_text.rsplit('=', 1)[0]
lhs = eval(lhs)
rhs = valid_text.rsplit('=', 1)[1]
rhs = eval(rhs)
solution = solve(Eq(lhs, rhs), x)
当我将String传递给它时,我使用eval()
函数返回一个对象。但eval()
函数有时会给出
rhs = eval(rhs)
File "<string>", line 1, in <module>
TypeError: 'int' object is not callable` **AND other inappropriate outputs.**
还有其他方法可以从String获取对象吗?
答案 0 :(得分:0)
好像你想做符号演算。据我所知,python没有处理这种类型的问题,但是库简单似乎是这样做的。您可以在{{3}}
找到相关信息另一种方法是自己开发语法和语法分析器,但如前所述,它还有很长的路要走。
祝你好运!答案 1 :(得分:0)
如果您尝试解析的字符串代表SymPy表达式,那么sympy.parsing.sympy_parser.parse_expr
看起来就像是工作的工具。
In [8]: from sympy.parsing.sympy_parser import parse_expr
In [9]: parse_expr('2*x*sin(x)')
Out[9]: 2*x*sin(x)
答案 2 :(得分:0)
这是一个完整的解决方案
from sympy import solve
from sympy.abc import x, y, z, a, b
from sympy.parsing.sympy_parser import parse_expr
def solve_meThis(string_):
try:
lhs = parse_expr(string_.split("=")[0])
rhs = parse_expr(string_.split("=")[1])
solution = solve(lhs-rhs)
return solution
except:
print "invalid equation"
valid_text = "1/4*x+ 1 = 1/6*x+ 1/2"
solve_meThis(valid_text)
>> -6
答案 3 :(得分:0)
这对我有用:
from sympy import *
from pydoc import locate
x, y, z, p, q, r, m, n, i, j = symbols('x y z p q r m n i j')
if 'x' in valid_text and '=' in valid_text:
t = locate('sympy.sympify')
lhs = valid_text.rsplit('=', 1)[0]
lhs = t(lhs)
rhs = valid_text.rsplit('=', 1)[1]
rhs = t(rhs)
solution = solve(Eq(lhs, rhs), x)