Добрый день! Хочется сделать программу, которая модифицирует текст с формулами, меняя окружения. Но есть сомнения - возможно ли реализовать эту идею? Зачем? Чтобы загружать задачи по математике на сайт на базе Moodle, исправляя ошибки автоматически, чтобы не писать окружения для формул. Сначала напишу идею детальнее, после будет пример на входе и выходе, а в конце будет скрипт, который делает частичные изменения, но очень криво.
1) Каждая формула должна начинаться на \(, а заканчиваться на \). Форма для ответов вида "{1:SHORTANSWER:=-4,2}" не является формулой, это критически важно. Если были исходные окружения для формул виде двойных долларов или однократных, то их нужно удалить. Тоже самое касается и следующих двух пунктов.
2) Каждое отдельно стоящее число должно начинаться на \( и заканчиваться на \).
3) Каждая группа латинских символов должна начинаться на \( и заканчиваться на \)
4) Нужно сделать так, чтобы формула примыкала к границам \( и \). не было пробелов между последним символом в формуле и \). Аналогично с началом формулы.
5) Также нужно заменить в формулах sin на \sin и % на \%. А также tan на \operatorname{tg} и символ * на \cdot
6) Внутри формы для ответов "Ответ: {1:SHORTANSWER:=-4,2}" в качестве десятичного разделителя должн быть точка, а не запятая, то есть вот так "Ответ: {1:SHORTANSWER:=-4.2}"
На входе.
Код:
Решите уравнение: $ \dfrac{5}{2}(c - 3) - \dfrac{1}{6}(2c - 7) = 2$. Ответ: {1:SHORTANSWER:=-45,21}
Решите уравнение: x*2 + 3= 24 Ответ: {1:SHORTANSWER:=-45,21}
Решите уравнение \[ \sin x = 1 \] Ответ: {1:SHORTANSWER:=-45.21}
$$
2*x+110>100
$$
$
x+1>0
$
Свежие фрукты содержат 75% воды, а высушенные – $25\%$. Сколько
требуется свежих фруктов для приготовления \[45\] кг высушенных фруктов?
В треугольнике ABC проведена биссектриса. Прямая a параллельна прямой b.
$sin x + tan x= 1$ {1:SHORTANSWER:=-45}
Упростите \(\dfrac{m^{\frac43} - 27 m^{\frac13} n}{\sqrt[3]{m^{2}} + 3\sqrt[3]{mn} + \sqrt[3]{9 n^{2}}} \cdot \dfrac{1}{\left( 1 - 3 \left( \dfrac{m}{n} \right)^{-\frac{1}{3}} \right)}. \)
На выходе:
Код:
Решите уравнение: \(\dfrac{5}{2}(c - 3) - \dfrac{1}{6}(2c - 7) = 2\). Ответ: {1:SHORTANSWER:=-45.21}
Решите уравнение: \(x\cdot 2 + 3 = 24\) Ответ: {1:SHORTANSWER:=-45.21}
Решите уравнение \(\sin x = 1\) Ответ: {1:SHORTANSWER:=-45.21}
\(2\cdot x + 110 > 100\)
\(x+1>0\)
Свежие фрукты содержат \(75\%\) воды, а высушенные – \(25\%\). Сколько
требуется свежих фруктов для приготовления \(45\) кг высушенных фруктов?
В треугольнике \(ABC\) проведена биссектриса. Прямая \(a\) параллельна прямой \(b\).
\(\sin x + \operatorname{tg}x= 1\) {1:SHORTANSWER:=-45}
Упростите \(\dfrac{m^{\frac43} - 27 m^{\frac13} n}{\sqrt[3]{m^{2}} + 3\sqrt[3]{mn} + \sqrt[3]{9 n^{2}}} \cdot \dfrac{1}{\left( 1 - 3 \left( \dfrac{m}{n} \right)^{-\frac{1}{3}} \right)}.\)
Вот такой код ничего толкового не дает.
import re
import pyperclip
def process_text(text):
text = re.sub(r'\[|\]', '', text)
text = re.sub(r'\bsin\b', r'\\sin', text)
text = re.sub(r'\btan\b', r'\\operatorname{tg}', text)
text = re.sub(r'%', r'\\%', text)
text = re.sub(r'\*', r'\\cdot', text)
text = re.sub(r'(-?\d+),(\d+)', r'\1.\2', text)
text = re.sub(r'\$\$([^\$]+)\$\$', r'\\(\1\\)', text)
text = re.sub(r'\$([^\$]+)\$', r'\\(\1\\)', text)
text = re.sub(r'\b([a-zA-Z]+)\b', r'\\(\1\\)', text)
text = re.sub(r'\\\(\s*', r'\\(', text)
text = re.sub(r'\s*\\\)', r'\\)', text)
return text
text = pyperclip.paste()
processed_text = process_text(text)
pyperclip.copy(processed_text)
print("Текст успешно обработан и скопирован в буфер обмена.")
-- 19.10.2024, 13:53 --Что-то я немного разделом ошибся
, извините, пожалуйста.