Преобразование математического выражения в произнесенные слова в 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 не сработает. вот исправленный

Другие вопросы по тегам