Преобразование математического выражения в произнесенные слова в Python
Мне нужно преобразовать математическое выражение в текст устной речи, например, «x^2» в «x в степени 2», скажем, с помощью Python. Для формата выражения латекс подойдет, но преобразовать формат латекса в текст у меня не получается ( нужен только текст , а не голос - mp3). Я узнал о модуле SayTex в Python, но он делает противоположное тому, что мне нужно (преобразует устную математику в латексное выражение);
Есть ли какие-то подходы, которые я могу использовать для решения своей проблемы?
Я попробовал что-то с Sympy, но это не удалось:
from sympy import latex, sympify, pretty
def latex_to_text(latex_code):
expr = sympify(latex_code, evaluate=False)
text_representation = pretty(expr, use_unicode=True)
return text_representation
latex_code = '\frac{1}{2} \times x^2'
human_readable_text = latex_to_text(latex_code)
print(human_readable_text)
Возможно, Sympy — не лучший инструмент для моей проблемы.
1 ответ
Я считаю, что это должно работать или, по крайней мере, работать для основных математических выражений.
Эта библиотека под названием pylatexen поможет вам преобразовать латекс в обычный математический текст. Это поможет вам преобразовать его в английские слова. Вы можете попробовать разные вещи. Дело в том, что вы можете использовать Inflect со своим собственным словом dict, чтобы преобразовать выражение в английский текст. Это очень простой подход
import inflect
words = {
"*": "times",
"^": "raised to the power",
"=": "equals",
"+": "plus"
# add more
}
def convert_math_expression(expression):
p = inflect.engine()
expression = expression.split()
for i, e in enumerate(expression.copy()):
if e in words:
expression[i] = words[e]
else:
if not e.isalpha():
expression[i] = p.number_to_words(e, andword=", and")
return ' '.join(expression)
# put the converted math expression here
# needs spaces in between for split method to work
math_expression = "2 * x + 5 = 10"
english_text = convert_math_expression(math_expression)
print(english_text)
Выход:
two times x plus five equals ten
Изменить: предыдущий ответ с использованием Sympy не сработает. вот исправленный