/
makster
/
clear_text
Обзор
Документация
Войти
/
makster
/
clear_text
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
app/rules.py
72 строки
3 KB
Александр Обогрелов
Initial commit
28 окт 2025, 22:51
28 окт 2025, 22:51
81757a1
Код
Авторство
О чём код?
""" rules.py — модуль эвристического анализа текста """ import re from typing import List, Dict # Примеры канцеляризмов и "воды" CANCELLARISMS = ["осуществляет", "в рамках", "в данный момент", "производится", "осуществление"] FILLER_PHRASES = ["в целом", "в определённой степени", "следует отметить", "таким образом"] def analyze_text(text: str, max_issues: int = 100) -> List[Dict]: """ Анализирует текст и возвращает список проблемных фрагментов. Возвращает список словарей: { "start": int, "end": int, "type": str, "message": str, "suggestion": str | None } """ issues = [] # Проверка на канцеляризмы for phrase in CANCELLARISMS: for match in re.finditer(re.escape(phrase), text, flags=re.IGNORECASE): issues.append({ "start": match.start(), "end": match.end(), "type": "канцеляризм", "message": f"Слово/фраза «{phrase}» выглядит как канцеляризм. Подумайте о более простом варианте.", "suggestion": None }) if len(issues) >= max_issues: return issues # Проверка на "воду" for phrase in FILLER_PHRASES: for match in re.finditer(re.escape(phrase), text, flags=re.IGNORECASE): issues.append({ "start": match.start(), "end": match.end(), "type": "вода", "message": f"Фраза «{phrase}» может быть избыточной. Уберите или переформулируйте.", "suggestion": None }) if len(issues) >= max_issues: return issues # Проверка на слишком длинные предложения sentences = re.split(r'(?<=[.!?])\s+', text) position = 0 for s in sentences: words = s.split() if len(words) > 25: start = text.find(s, position) end = start + len(s) issues.append({ "start": start, "end": end, "type": "длинное предложение", "message": f"Предложение содержит {len(words)} слов. Возможно, стоит его разбить.", "suggestion": None }) if len(issues) >= max_issues: return issues position += len(s) + 1 return issues