import language_tool_python import openai import streamlit as st import subprocess from pathlib import Path import html is_java_installed = False def install_java(): global is_java_installed if is_java_installed: return try: subprocess.run(["apt-get", "update"], check=True) subprocess.run(["apt-get", "install", "-y", "openjdk-17-jdk"], check=True) is_java_installed = True except Exception as e: st.error(f"Ошибка установки Java: {e}") @st.cache_resource def load_assets(): openai.api_key = 'sk-proj-...' # Ваш API-ключ install_java() tool = language_tool_python.LanguageTool('ru-RU', language_tool_download_version="6.1") return tool def generate_gpt_comment(message, context): response = openai.ChatCompletion.create( model="gpt-4o", messages=[ {"role": "user", "content": f"Прокомментируй ошибку: {message} в данном тексте '{context}'. Не больше одного предложения, на русском."} ] ) return response.choices[0].message['content'] def check_text(text, tool): matches = tool.check(text) errors = [] for match in matches: error_info = { 'start': match.offset, 'end': match.offset + match.errorLength, 'message': generate_gpt_comment(match.message, match.context), } errors.append(error_info) return errors def main(): st.markdown(""" """, unsafe_allow_html=True) st.title('Проверка орфографии') # Сохраняем текст в session_state text_input = st.text_area("Введите текст для проверки:", value=st.session_state.get('text_to_check', ''), height=200) text = text_input.replace("\n", " ") tool = load_assets() if st.button('Проверить текст'): st.session_state.text_to_check = text_input if not text.strip(): st.warning("Введите текст для проверки") else: errors = check_text(text, tool) st.session_state.errors = errors st.session_state.sorted_errors = sorted(errors, key=lambda x: x['start']) st.query_params.clear() # Очищаем параметры URL # Используем сохраненные ошибки при наличии errors = st.session_state.get('errors', []) sorted_errors = st.session_state.get('sorted_errors', []) if errors: # Генерация HTML с кликабельными ошибками highlighted = [] last_pos = 0 for index, error in enumerate(sorted_errors): highlighted.append(html.escape(text[last_pos:error['start']])) highlighted.append( f'' f'' f'{html.escape(text[error["start"]:error["end"]])}' f'' ) last_pos = error['end'] highlighted.append(html.escape(text[last_pos:])) html_content = f"""