import language_tool_python import streamlit as st from pathlib import Path import html @st.cache_resource def load_assets(): tool = language_tool_python.LanguageTool('ru-RU', language_tool_download_version="6.1") return tool 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': match.message, 'context': match.context } errors.append(error_info) return errors def main(): st.title('Проверка орфографии') text = st.text_area("Введите текст для проверки:", height=200) if st.button('Проверить текст'): if not text.strip(): st.warning("Введите текст для проверки") else: errors = check_text(text) if not errors: st.success("Ошибок не найдено! 👍") else: sorted_errors = sorted(errors, key=lambda x: x['start']) highlighted = [] last_pos = 0 for error in sorted_errors: highlighted.append(html.escape(text[last_pos:error['start']])) highlighted.append( f'' f'{html.escape(text[error["start"]:error["end"]])}' f'' ) last_pos = error['end'] highlighted.append(html.escape(text[last_pos:])) html_content = f"""
{''.join(highlighted)}
""" st.markdown("### Результат проверки:") st.markdown(html_content, unsafe_allow_html=True) st.markdown("### Найденные ошибки:") for i, error in enumerate(errors, 1): st.markdown(f"{i}. **Позиция {error['start']}-{error['end']}**: {error['message']}") if __name__ == "__main__": main()