|
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'<span style="background-color: #ffe066; border-bottom: 2px dotted #ff9900; ' |
|
f'position: relative;" title="{html.escape(error["message"])}">' |
|
f'{html.escape(text[error["start"]:error["end"]])}' |
|
f'</span>' |
|
) |
|
|
|
last_pos = error['end'] |
|
|
|
highlighted.append(html.escape(text[last_pos:])) |
|
|
|
html_content = f""" |
|
<div style=" |
|
background: white; |
|
padding: 20px; |
|
border-radius: 8px; |
|
border: 1px solid #ddd; |
|
white-space: pre-wrap; |
|
font-family: monospace; |
|
"> |
|
{''.join(highlighted)} |
|
</div> |
|
""" |
|
|
|
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() |
|
|