ru-humanizer 3.26.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ru_humanizer-3.26.0/LICENSE +21 -0
- ru_humanizer-3.26.0/PKG-INFO +73 -0
- ru_humanizer-3.26.0/README.md +414 -0
- ru_humanizer-3.26.0/pypi/README.md +50 -0
- ru_humanizer-3.26.0/pyproject.toml +46 -0
- ru_humanizer-3.26.0/ru_humanizer.egg-info/PKG-INFO +73 -0
- ru_humanizer-3.26.0/ru_humanizer.egg-info/SOURCES.txt +20 -0
- ru_humanizer-3.26.0/ru_humanizer.egg-info/dependency_links.txt +1 -0
- ru_humanizer-3.26.0/ru_humanizer.egg-info/entry_points.txt +3 -0
- ru_humanizer-3.26.0/ru_humanizer.egg-info/requires.txt +2 -0
- ru_humanizer-3.26.0/ru_humanizer.egg-info/top_level.txt +2 -0
- ru_humanizer-3.26.0/setup.cfg +4 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/__init__.py +100 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/burstiness.py +132 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/facts.py +193 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/markdown.py +127 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/markers.py +462 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/mcp_server.py +254 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/morphology.py +78 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/score.py +208 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/humanizer_metrics/structure.py +154 -0
- ru_humanizer-3.26.0/skills/humanizer-ru/scripts/scan.py +208 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ilya Utov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ru-humanizer
|
|
3
|
+
Version: 3.26.0
|
|
4
|
+
Summary: Сканер следов нейросети в русском тексте: балл чистоты 0-100, 21 жёсткий запрет, 64 признака, факт-замок. CLI и MCP-сервер проекта humanizer-ru.
|
|
5
|
+
Author: Ilya Utov
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://humanizer-ru.aifrontier.tech/
|
|
8
|
+
Project-URL: Repository, https://github.com/ilyautov/humanizer-ru
|
|
9
|
+
Project-URL: Changelog, https://github.com/ilyautov/humanizer-ru/blob/main/CHANGELOG.md
|
|
10
|
+
Keywords: russian,humanizer,ai-text,ai-detector,mcp,canceljarit,nlp
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Natural Language :: Russian
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: razdel>=0.5
|
|
21
|
+
Requires-Dist: pymorphy3>=2.0
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
# ru-humanizer
|
|
25
|
+
|
|
26
|
+
Сканер следов нейросети в русском тексте из проекта
|
|
27
|
+
[humanizer-ru](https://github.com/ilyautov/humanizer-ru). Считает балл чистоты от 0 до 100,
|
|
28
|
+
находит 21 жёсткий запрет и 64 признака машинной манеры, проверяет факт-замок между
|
|
29
|
+
исходником и правкой. Правила откалиброваны на 55 тысячах размеченных русских текстов.
|
|
30
|
+
Работает офлайн, текст никуда не отправляется.
|
|
31
|
+
|
|
32
|
+
mcp-name: io.github.ilyautov/humanizer-ru
|
|
33
|
+
|
|
34
|
+
## Командная строка
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pip install ru-humanizer
|
|
38
|
+
ru-humanizer статья.md
|
|
39
|
+
ru-humanizer статья.md --genre academic
|
|
40
|
+
echo "текст" | ru-humanizer -
|
|
41
|
+
ru-humanizer чистовик.md --before исходник.md
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Код выхода: 0 чисто, 1 есть жёсткие запреты, 2 в чистовике появился факт, которого
|
|
45
|
+
не было в исходнике. Флаг `--json` отдаёт машинный отчёт.
|
|
46
|
+
|
|
47
|
+
## MCP-сервер
|
|
48
|
+
|
|
49
|
+
Тот же пакет поднимает MCP-сервер по stdio с двумя инструментами:
|
|
50
|
+
|
|
51
|
+
- `scan_text`: балл, штрафы, запреты и маркеры с позициями, ритм, морфология, структура.
|
|
52
|
+
- `compare_texts`: балл «было и стало» и факт-замок: что пропало, что появилось, какие
|
|
53
|
+
кванторы вроде «впервые» или «единственный» возникли без источника.
|
|
54
|
+
|
|
55
|
+
Конфигурация для Claude Desktop, Cursor и других клиентов:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mcpServers": {
|
|
60
|
+
"humanizer-ru": {
|
|
61
|
+
"command": "uvx",
|
|
62
|
+
"args": ["--from", "ru-humanizer", "ru-humanizer-mcp"]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Что это не делает
|
|
69
|
+
|
|
70
|
+
Балл считает плотность оборотов, по которым читатель узнаёт машинную манеру. Это не
|
|
71
|
+
вероятность авторства и не детектор: инструмент не обходит проверки и не выносит
|
|
72
|
+
вердиктов, он показывает, что править. Полный каталог признаков, скилл для агентов и
|
|
73
|
+
расширение Chrome лежат в репозитории.
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
# humanizer-ru: очеловечить русский AI-текст для Claude Code, Cursor, Codex и других AI-агентов
|
|
2
|
+
|
|
3
|
+
> Скилл для Claude. Убирает 64 признака нейросети в русском тексте: канцелярит, кальки, фингерпринты ChatGPT и Claude. Метит в то, что измеряют GPTZero, DivEye, RuBERT: поднимает perplexity и burstiness. 21 жёстких банов, quad-pass аудит, калибровка под голос автора, eval-харнес с метриками до/после. Живое демо сканера на сайте.
|
|
4
|
+
|
|
5
|
+
> [English version](README.en.md) · [中文](README.zh.md)
|
|
6
|
+
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/ilyautov/humanizer-ru/blob/main/CHANGELOG.md)
|
|
9
|
+
[](https://github.com/ilyautov/humanizer-ru/stargazers)
|
|
10
|
+
[](https://skills.sh/ilyautov/humanizer-ru/humanizer-ru)
|
|
11
|
+
[](https://www.npmjs.com/package/humanizer-ru)
|
|
12
|
+
[](https://hol.org/registry/plugins/ilya-utov%2Fhumanizer-ru)
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://humanizer-ru.aifrontier.tech/">
|
|
16
|
+
<img src="assets/social-preview.png" alt="humanizer-ru: убирает следы нейросети из русского текста. 64 признака, 21 запрет, сканер в комплекте" width="720">
|
|
17
|
+
</a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
> **Было:** «В современном мире данная технология является не просто инструментом, а стратегическим активом».
|
|
21
|
+
> **Стало (факты автора):** «Инструмент экономит команде сорок минут в день. Попробуйте теперь его у людей забрать».
|
|
22
|
+
>
|
|
23
|
+
> Три жёстких бана в одном предложении. [Полный разбор с режимом аудита ниже](#до-и-после).
|
|
24
|
+
|
|
25
|
+
🧪 **Живое демо:** [humanizer-ru.aifrontier.tech](https://humanizer-ru.aifrontier.tech/#audit). Вставьте свой текст, получите оценку чистоты 0-100 и подсветку найденных оборотов. Тот же сканер, что в скилле, считается в браузере.
|
|
26
|
+
|
|
27
|
+
**Быстрый старт**, одна команда для любого агента (Claude Code, Cursor, Codex, Copilot, Cline и ещё десятки):
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
npx skills add ilyautov/humanizer-ru
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
CLI найдёт установленных агентов и спросит, куда ставить. В Claude Code можно и плагином, тогда обновления приходят через `/plugin`:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
/plugin marketplace add ilyautov/humanizer-ru
|
|
37
|
+
/plugin install humanizer-ru@ilyautov-plugins
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Claude.ai, DeepSeek Harness и раскатка на команду в [разделе «Установка»](#установка).
|
|
41
|
+
|
|
42
|
+
📖 **Документация и разборы:** [humanizer-ru.aifrontier.tech](https://humanizer-ru.aifrontier.tech/): [работают ли AI-детекторы на русском](https://humanizer-ru.aifrontier.tech/ai-detektory-na-russkom.html), [64 признака AI-текста](https://humanizer-ru.aifrontier.tech/52-priznaka-ai-teksta.html), [антиплагиат и нейросеть](https://humanizer-ru.aifrontier.tech/antiplagiat-i-neyroset.html).
|
|
43
|
+
|
|
44
|
+
🧰 **Остальные инструменты:** MCP-серверы к кабинетам Wildberries, Ozon, Яндекс Маркета и Авито, пять серверов к hh.ru, VK, Диадоку, СБИС и Честному знаку, 34 скилла для малого бизнеса, совет мыслителей с дословной проверкой цитат. Все одним списком: [ilyautov.github.io](https://ilyautov.github.io/).
|
|
45
|
+
|
|
46
|
+
## Зачем это нужно
|
|
47
|
+
|
|
48
|
+
Английский [humanizer](https://github.com/blader/humanizer) для русского текста не работает. У русских AI-маркеров своя физика: канцелярит («осуществление внедрения»), кальки с английского синтаксиса («стоит отметить, что»), отсутствующие частицы («же», «ведь», «вот»), которыми живой русский дышит. С английскими паттернами это не пересекается вообще.
|
|
49
|
+
|
|
50
|
+
Кроме того, в 2025-2026 Claude и GPT-4/5 научились имитировать «глубокомысленность»: короткими рублёными предложениями («Точно. Отдельно. Рефлексивно.»), псевдо-сократическими вопросами («Зачем? Потому что.») и псевдо-терапевтическим регистром («ты не ошибаешься, что так чувствуешь»). Это новый слой маркеров, которого нет ни в одном другом humanizer.
|
|
51
|
+
|
|
52
|
+
## Что внутри
|
|
53
|
+
|
|
54
|
+
**64 паттерна AI-генерации в 14 категориях:**
|
|
55
|
+
|
|
56
|
+
- A. Контентные: пустые открытия, размытые авторитеты, формульные выводы
|
|
57
|
+
- B. Языковые: канцелярит, кальки, «является», нагромождение причастий
|
|
58
|
+
- C. Стилистические: длинные тире, навязчивые списки, болд
|
|
59
|
+
- D. Коммуникативные: артефакты чатбота, заискивание, водянистость
|
|
60
|
+
- E. Морфологические: падежные ошибки, деепричастия не к подлежащему
|
|
61
|
+
- F. Тональные: эмоциональная стерильность (4 подтипа), нет иронии, нет метафор
|
|
62
|
+
- G. Структурные: разорванные абзацы, narrative drift, галлюцинации
|
|
63
|
+
- H. Человеческие мелочи: идеальная грамотность, вылизанная типографика
|
|
64
|
+
- I. Паттерны убеждения: негативные параллелизмы, авторитетные трюизмы
|
|
65
|
+
- J. Информационный ритм: равномерная плотность, гладкие переходы, macro-burstiness
|
|
66
|
+
- K. Хеджирование и специфика: модальная неопределённость, translationese, нет идиом
|
|
67
|
+
- L. Стилистические фингерпринты 2025-2026: рваная медитативность, контр-вопросы, эмодзи-декор, псевдо-терапия, пустой образ, самомаркировка честности
|
|
68
|
+
- M. Формулы и артефакты 2026: неодушевлённый субъект, Title Case в заголовках, обрыв на полуслове, триада-отрицание
|
|
69
|
+
- N. Дискурсный слой: явная мораль в финале, портретный ввод героя, эмоция только через тело, бесшовная причинность, линейная хронология, нет обращения к читателю. Признаки, которые переживают стилевую правку (StoryScope, COLM 2026)
|
|
70
|
+
|
|
71
|
+
**21 жёстких банов**: конструкции с абсолютным запретом. От «В современном мире...» и «Стоит отметить, что...» до маркетинговых клише «Раскрыть потенциал», «Комплексный подход», «Открывает новые горизонты».
|
|
72
|
+
|
|
73
|
+
**Локальная редактура, не переписывание.** Скилл размечает конкретные места (цитата, что мешает читателю, действие: оставить, срезать оболочку, сказать яснее, убрать дубль), снимает жёсткие запреты и маркеры по приоритету A-D и сверяет результат с исходником по утверждениям: кто что сделал, степень уверенности, условия, числа с единицами. Живость не дописывается: эмоции, частицы, образы и факты, которых нет в исходнике, в текст не идут. Парный прогон на 195 слепых оценках (сентябрь 2026, `eval/LOCAL_EDIT_CHECK.md`) показал, что квоты на «голос» дают чужую интонацию и постановочную риторику, а локальная правка почти не ломает смысл.
|
|
74
|
+
|
|
75
|
+
**Калибровка под голос автора.** Если дать образцы своего письма, скилл выписывает ритм, лексику, пунктуацию и тон и держит замены в этих рамках. Это ограничение, а не разрешение дописывать в вашей манере.
|
|
76
|
+
|
|
77
|
+
**Четыре режима работы:**
|
|
78
|
+
- Редактура (по умолчанию): диагностика сканером, разметка, правка, сверка, отчёт «было N, стало M»
|
|
79
|
+
- Аудит: только диагностика, текст не трогает
|
|
80
|
+
- Точечная правка: работа с одной категорией
|
|
81
|
+
- Свой черновик (молча, без просьбы): пока скилл установлен, агент прогоняет по таблице жёстких банов то, что пишет по-русски сам, до того как вы это увидите. Чужой текст молча не правится никогда: ваше сообщение, файл, цитата и чужой код идут только через режимы выше, и правку вы видите. «Не правь» выключает режим до конца разговора
|
|
82
|
+
|
|
83
|
+
**Что ловят детекторы:** секция с числами из исследований 2025-2026. DivEye: вторые производные surprisal дают 39.4% вклада в детекцию. Perplexity gap 29.5 vs 15.2 (человек vs LLM). AINL-Eval 2025: лучший результат на тесте около 86% (52K русских текстов, 12 доменов). Все ссылки и цифры верифицированы по первоисточникам, см. [SOURCES.md](SOURCES.md).
|
|
84
|
+
|
|
85
|
+
## Проверить текст без установки
|
|
86
|
+
|
|
87
|
+
На [главной странице сайта](https://humanizer-ru.aifrontier.tech/#audit) работает тот же сканер на JavaScript: вставьте текст, получите оценку чистоты от 0 до 100, подсветку найденных оборотов и команду установки для своей среды. Считается в браузере, текст никуда не отправляется. Правила экспортируются из `markers.py` скриптом `scripts/export_web_rules.py`, а паритет с Python проверяет `scripts/test_web_parity.py` в CI.
|
|
88
|
+
|
|
89
|
+
Тот же сканер есть как расширение Chrome: выделили текст на любой странице, в контекстном меню «Проверить на следы нейросети», и попап показывает балл и подсветку. Разрешений у него два, контекстное меню и локальное хранилище, доступа к сайтам и сети нет. Папка `extension/`, сборка `scripts/build_extension.py`; пока идёт модерация в Web Store, ставится через `chrome://extensions` → «Режим разработчика» → «Загрузить распакованное расширение».
|
|
90
|
+
|
|
91
|
+
## Установка
|
|
92
|
+
|
|
93
|
+
Скилл разворачивается тремя путями: загрузкой в веб-интерфейс Claude.ai, централизованной раскаткой на команду или установкой в локальные агенты (Claude Code, Cowork, API).
|
|
94
|
+
|
|
95
|
+
### 1. Claude.ai (веб-интерфейс)
|
|
96
|
+
|
|
97
|
+
1. Скачайте готовый архив скилла:
|
|
98
|
+
[humanizer-ru.zip](https://github.com/ilyautov/humanizer-ru/releases/latest/download/humanizer-ru.zip)
|
|
99
|
+
2. Откройте Claude.ai → **Settings** → **Capabilities** → **Skills**.
|
|
100
|
+
3. Нажмите **Upload skill** и выберите скачанный архив.
|
|
101
|
+
|
|
102
|
+
> Не берите `archive/refs/heads/main.zip`: загрузчик ожидает папку скилла в корне архива, а в архиве репозитория она лежит внутри `humanizer-ru-main/skills/humanizer-ru/`. Если нужно собрать архив самому, архивируйте именно папку скилла:
|
|
103
|
+
>
|
|
104
|
+
> ```bash
|
|
105
|
+
> git clone https://github.com/ilyautov/humanizer-ru.git
|
|
106
|
+
> cd humanizer-ru/skills
|
|
107
|
+
> zip -r ../../humanizer-ru.zip humanizer-ru -x '*/__pycache__/*'
|
|
108
|
+
> ```
|
|
109
|
+
|
|
110
|
+
### 2. Организации (Enterprise и Team)
|
|
111
|
+
|
|
112
|
+
Администраторы Claude for Work раскатывают скилл централизованно через workspace skill library, и он становится доступен всей команде без индивидуальной загрузки. Загрузите ZIP в **Admin Console → Workspace Skills → Add skill**.
|
|
113
|
+
|
|
114
|
+
### 3. Claude Code, Cowork и API (локальные агенты)
|
|
115
|
+
|
|
116
|
+
**Через плагин-маркетплейс** (рекомендуется):
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
/plugin marketplace add ilyautov/humanizer-ru
|
|
120
|
+
/plugin install humanizer-ru@ilyautov-plugins
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
После установки плагин подгружает скилл автоматически при триггерах вроде «очеловечь», «убери канцелярит», «перепиши как человек».
|
|
124
|
+
|
|
125
|
+
**Через skills.sh CLI** (универсальный путь для любого Claude-агента):
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
npx skills add https://github.com/ilyautov/humanizer-ru/tree/main/skills/humanizer-ru
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
CLI кладёт `SKILL.md` в `~/.claude/skills/humanizer-ru/` и регистрирует скилл в индексе [skills.sh](https://skills.sh/ilyautov/humanizer-ru/humanizer-ru). Короткая форма тоже работает: `npx skills add ilyautov/humanizer-ru` находит скилл в репозитории и предлагает его к установке, а с флагом `--skill humanizer-ru` ставит без вопросов.
|
|
132
|
+
|
|
133
|
+
**Через API (`/v1/messages` и аналоги):** передайте скилл параметром `container.skills`. Детали в документации вашего клиента.
|
|
134
|
+
|
|
135
|
+
**Вручную** (если ничего из выше не подошло):
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
git clone --depth 1 https://github.com/ilyautov/humanizer-ru /tmp/humanizer-ru
|
|
139
|
+
mkdir -p ~/.claude/skills
|
|
140
|
+
cp -r /tmp/humanizer-ru/skills/humanizer-ru ~/.claude/skills/
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Копируйте папку целиком, а не один SKILL.md: вместе со скиллом едет
|
|
144
|
+
детерминированный сканер `scripts/scan.py` (машинная половина режима «Аудит»;
|
|
145
|
+
работает при наличии `pip install razdel pymorphy3`, без них скилл просто
|
|
146
|
+
проводит аудит вручную).
|
|
147
|
+
|
|
148
|
+
### 4. Codex CLI (OpenAI)
|
|
149
|
+
|
|
150
|
+
Codex использует тот же формат Agent Skills, отдельная версия не нужна:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
git clone --depth 1 https://github.com/ilyautov/humanizer-ru
|
|
154
|
+
mkdir -p ~/.codex/skills
|
|
155
|
+
cp -r humanizer-ru/skills/humanizer-ru ~/.codex/skills/
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Либо изнутри Codex через `skill-installer`: укажите путь
|
|
159
|
+
`ilyautov/humanizer-ru/skills/humanizer-ru`. После установки перезапустите Codex;
|
|
160
|
+
вызов: `$humanizer-ru` или автоматически по триггер-фразам («очеловечь»,
|
|
161
|
+
«убери канцелярит»). Проектная установка: та же папка в `.codex/skills/` внутри репозитория.
|
|
162
|
+
|
|
163
|
+
### Проверка установочного пакета
|
|
164
|
+
|
|
165
|
+
Перед релизом соберите ZIP тем же скриптом, который использует CI, затем
|
|
166
|
+
прогоните install-smoke по готовому архиву. Проверка копирует
|
|
167
|
+
`skills/humanizer-ru` в чистую временную папку скиллов, запускает сканер из
|
|
168
|
+
установленной копии и проверяет, что в ZIP нет `.DS_Store`, `__pycache__` и
|
|
169
|
+
`*.pyc`:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
python3 scripts/build_release_zip.py --output dist/humanizer-ru.zip .
|
|
173
|
+
python3 scripts/install_smoke.py . --zip dist/humanizer-ru.zip
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Ожидаемый результат:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
RESULT: PASS build-release-zip
|
|
180
|
+
RESULT: PASS install-smoke
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 5. Другие агенты (общий стандарт SKILL.md)
|
|
184
|
+
|
|
185
|
+
Формат Agent Skills стал кросс-платформенным, поэтому humanizer-ru работает и за пределами упакованных стеков. Официально упакованы и проверены: Claude Code, Codex CLI, Cursor, Gemini CLI, DeepSeek Harness. Остальные агенты читают тот же `SKILL.md`, отдельная версия не нужна.
|
|
186
|
+
|
|
187
|
+
| Как подключается | Агенты | Что делать |
|
|
188
|
+
|---|---|---|
|
|
189
|
+
| Читают `SKILL.md` нативно | GitHub Copilot, Cline, Roo Code, Kilo Code, Goose, OpenCode, OpenWork, Kimi Code CLI, OpenClaw, OpenHuman, Hermes | Скопировать папку `skills/humanizer-ru` в каталог скиллов агента (например `~/.hermes/skills/`, `~/.kimi/skills/`, `.agents/skills/`) |
|
|
190
|
+
| Конвертация инсталлером | Windsurf, Trae, Junie | Поставить через их установщик скиллов, указав репозиторий `ilyautov/humanizer-ru` |
|
|
191
|
+
| Ручная вставка | Zed, Aider, Continue.dev | Вставить тело `SKILL.md` в файл правил или инструкций агента |
|
|
192
|
+
|
|
193
|
+
Универсальный путь для нативных: положите папку скилла в каталог, который агент сканирует (обычно `<корень проекта>/.agents/skills/` или `~/.config/agents/skills/`), и перезапустите агент. Триггеры активации те же, что в Claude.
|
|
194
|
+
|
|
195
|
+
> У части этих агентов (OpenClaw, Kimi, Hermes) есть публичные каналы дистрибуции скиллов (реестр ClawHub, tap-репозитории). Листинг там даёт охват без отдельного кода: формат общий.
|
|
196
|
+
|
|
197
|
+
### 6. DeepSeek Harness (dsh)
|
|
198
|
+
|
|
199
|
+
DeepSeek Harness читает тот же формат Agent Skills, и скилл ставится двумя способами.
|
|
200
|
+
|
|
201
|
+
Бандлом из npm, одной командой в нужный профиль (`web`, `tui` или `headless`):
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
dsh plugin --profile web add humanizer-ru
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Тот же бандл прямо из GitHub, если нужна конкретная ветка или свежий main: `dsh plugin --profile web add github:ilyautov/humanizer-ru`.
|
|
208
|
+
|
|
209
|
+
Бандл текстовый: `package.json` с полем `dsh.bundle` и `cordis.patch.yml`, который монтирует штатный провайдер `dsh-skill-filesystem` на папку `skills/` пакета. Исполняемого кода в бандле нет, сборка при установке не нужна. Проверить без запуска модели: `dsh --profile web --dump-config` покажет слой `# == humanizer-ru`. Удаление: `dsh plugin --profile web remove humanizer-ru`.
|
|
210
|
+
|
|
211
|
+
Копией в пользовательский корень скиллов:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
cp -r humanizer-ru/skills/humanizer-ru ~/.agents/skills/
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
dsh сканирует `~/.agents/skills` и `~/.dsh/skills` сам, перезапуск не нужен. Ключ `allowed-tools` из фронтматтера dsh не читает, а `references/` разрешает относительно папки скилла, так что каталог и журнал правок открываются как в Claude Code.
|
|
218
|
+
|
|
219
|
+
### 7. Сканер отдельно: pip, MCP-сервер и GitHub Action
|
|
220
|
+
|
|
221
|
+
Сканер живёт и без скилла, пакетом [`ru-humanizer`](https://pypi.org/project/ru-humanizer/) на PyPI (имя `humanizer-ru` на PyPI занято). Это тот же `scan.py`, только командой:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
pip install ru-humanizer
|
|
225
|
+
ru-humanizer статья.md --genre academic
|
|
226
|
+
ru-humanizer чистовик.md --before исходник.md
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Тот же пакет поднимает MCP-сервер с двумя инструментами: `scan_text` даёт балл, штрафы, запреты и маркеры с позициями, `compare_texts` считает «было и стало» и факт-замок между исходником и правкой. Подключается к Claude Desktop, Cursor и любому клиенту MCP; в Claude Code одной командой:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
claude mcp add humanizer-ru -- uvx --from ru-humanizer ru-humanizer-mcp
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
В CI сканер работает как GitHub Action: гейт на балл чистоты по Markdown и текстовым файлам, шаг падает ниже порога.
|
|
236
|
+
|
|
237
|
+
```yaml
|
|
238
|
+
- uses: ilyautov/humanizer-ru@main
|
|
239
|
+
with:
|
|
240
|
+
files: "docs/**/*.md"
|
|
241
|
+
genre: marketing
|
|
242
|
+
min-score: 60
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Порядок разовой настройки публикации на PyPI и в реестре MCP описан в `PUBLISHING.md`.
|
|
246
|
+
|
|
247
|
+
## Использование
|
|
248
|
+
|
|
249
|
+
Попросите Claude по-русски:
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
Очеловечь этот текст: [вставьте текст]
|
|
253
|
+
Перепиши, звучит как робот: [вставьте текст]
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Триггеры срабатывания: «очеловечь», «убери следы нейросети», «сделай живым», «звучит искусственно», «перепиши как человек», «убери канцелярит», «слишком формально».
|
|
257
|
+
|
|
258
|
+
Режим аудита (только диагностика, без переписывания):
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
Проверь этот текст на AI-маркеры: [вставьте текст]
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Точечная правка одной категории:
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
Убери канцелярит из текста: [вставьте текст]
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
При установке плагином в Claude Code доступны slash-команды:
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
/humanize <текст или путь к файлу> # полный рерайт
|
|
274
|
+
/audit <текст или путь к файлу> # аудит без правки (сканер + разбор)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Сканер знает про жанр. По умолчанию он строгий, под маркетинг и блоги, а для
|
|
278
|
+
других регистров снимает маркеры, которые там законны:
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
python skills/humanizer-ru/scripts/scan.py статья.txt --genre academic # ещё legal, fiction, news
|
|
282
|
+
python skills/humanizer-ru/scripts/scan.py стало.txt --before было.txt # чистота до/после + факт-замок
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Зачем это нужно, показал прогон по внешнему размеченному корпусу AINL-Eval 2025
|
|
286
|
+
(35 158 русских научных аннотаций): в строгом режиме баны оставались в 35,9%
|
|
287
|
+
человеческих текстов против 26,1-35,8% машинных, то есть на научном тексте
|
|
288
|
+
каталог не различал автора вовсе. С жанровой поправкой ложные срабатывания на
|
|
289
|
+
людях падают до 4,2%. Цифры и метод: [eval/AINL-CALIBRATION.md](eval/AINL-CALIBRATION.md).
|
|
290
|
+
Третий корпус, [LLMTrace](https://huggingface.co/datasets/iitolstykh/LLMTrace_classification)
|
|
291
|
+
(14 763 русских текста, 30 генераторов, впервые GigaChat и YandexGPT), подтвердил
|
|
292
|
+
границы: на отзывах и историях длинное тире ставят 2-8% людей против 28-33%
|
|
293
|
+
машин, а в энциклопедических статьях наоборот. Разбор:
|
|
294
|
+
[eval/LLMTRACE-CALIBRATION.md](eval/LLMTRACE-CALIBRATION.md).
|
|
295
|
+
|
|
296
|
+
## До и после
|
|
297
|
+
|
|
298
|
+
**Полное редактирование:**
|
|
299
|
+
|
|
300
|
+
До:
|
|
301
|
+
> В современном мире искусственный интеллект играет всё более важную роль в различных сферах деятельности. Стоит отметить, что данная технология является мощным инструментом для оптимизации рабочих процессов.
|
|
302
|
+
|
|
303
|
+
После (факты автора):
|
|
304
|
+
> За последний год я внедрил AI-инструменты в три проекта. Два ускорились вдвое. Третий развалился, потому что команда перестала проверять то, что выдаёт модель. AI работает, когда понимаешь его ограничения.
|
|
305
|
+
|
|
306
|
+
Пять жёстких банов сработали в двух предложениях. Типичная картина.
|
|
307
|
+
|
|
308
|
+
**Режим аудита на том же тексте выдаст:**
|
|
309
|
+
|
|
310
|
+
```
|
|
311
|
+
[A] Пустое открытие: "В современном мире..."
|
|
312
|
+
[A] HARD BAN: "является мощным инструментом"
|
|
313
|
+
[A] HARD BAN: "играет важную роль"
|
|
314
|
+
[A] HARD BAN: "Стоит отметить, что..."
|
|
315
|
+
[B] Канцелярит: "оптимизации рабочих процессов"
|
|
316
|
+
[B] Раздувание: "всё более важную роль в различных сферах"
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Работают ли AI-детекторы на русском языке?
|
|
320
|
+
|
|
321
|
+
Коротко: плохо, и это придётся учитывать.
|
|
322
|
+
|
|
323
|
+
GPTZero, Originality.ai, ZeroGPT и другие популярные детекторы AI-текста обучены в основном на английском. На русском они ненадёжны и ошибаются в обе стороны:
|
|
324
|
+
|
|
325
|
+
- **Ложные срабатывания (false positives):** текст, написанный живым человеком, регулярно помечается как «сгенерировано нейросетью». Английские пороги perplexity для русского не откалиброваны, а богатая русская морфология сама задирает «непредсказуемость».
|
|
326
|
+
- **Пропуски (false negatives):** аккуратный AI-текст проходит как человеческий.
|
|
327
|
+
|
|
328
|
+
Даже лучший специализированный русский детектор (RuRoBERTa на бенчмарке AINL-Eval 2025) даёт около 86% точности: каждый седьмой вердикт мимо. И детекторы не обобщаются между доменами: обученный на научных текстах ошибается на блогах (verified, см. [SOURCES.md](SOURCES.md)).
|
|
329
|
+
|
|
330
|
+
**Что это значит для очеловечивания текста.** Гнаться за «обходом детектора» на русском значит подгонять текст под ненадёжный и постоянно меняющийся индикатор. Поэтому humanizer-ru оптимизирует не обман детектора, а **реальное качество текста**: убирает канцелярит, кальки и штампы, возвращает авторский голос и живой ритм. Это измеримые свойства языка (метрики в [`eval/`](eval/)), которые не зависят от того, насколько плох конкретный детектор. Заодно растут perplexity и burstiness: то, что детекторы (как умеют) и пытаются измерять.
|
|
331
|
+
|
|
332
|
+
Мы прогоняем детекторы прямо в eval-харнесе по контролю «заведомо человек» (дословные отрывки статей Википедии, написанные людьми задолго до ChatGPT). В последнем прогоне локальный LLM-детектор пометил как ИИ **3 из 3** человеческих текстов (false positive rate 100%), поставив им ту же вероятность «это AI», что и настоящим AI-текстам. Различающая способность близка к нулю. Методика, корпус и сырые прогоны: [eval/RESULTS.md](eval/RESULTS.md), секция «FP-аудит детекторов».
|
|
333
|
+
|
|
334
|
+
## Часто ищут
|
|
335
|
+
|
|
336
|
+
**Как обойти GPTZero на русском?** GPTZero измеряет perplexity и burstiness. Скилл поднимает оба показателя: контрастное вычитание (замена самого предсказуемого слова в каждом предложении) повышает perplexity, рваный ритм с короткими и длинными предложениями повышает burstiness. Адверсарный парафраз снижает true positive rate детекторов на 87.88% по NeurIPS 2025.
|
|
337
|
+
|
|
338
|
+
**Как убрать признаки ChatGPT из текста?** Главные сигналы: «не просто X, а Y» (80%+ AI-текстов), «стоит отметить», «является», длинное тире, отсутствие частиц «же/ведь/вот», равномерная информационная плотность. Скилл ловит и заменяет все 64 паттерна.
|
|
339
|
+
|
|
340
|
+
**Как сделать текст ChatGPT человеческим на русском?** Три шага: снять 21 жёстких банов и маркеры по приоритету, срезать оболочку вокруг утверждений вместо переписывания, сверить результат с исходником по фактам и степени уверенности. Живость не дописывается: то, чего нет в исходнике, в текст не идёт.
|
|
341
|
+
|
|
342
|
+
**Что такое канцелярит и как его убрать?** Канцелярит: превращение глаголов в отглагольные существительные («осуществление внедрения» вместо «внедрили»). Главный маркер русских AI-текстов. Соотношение существительных к глаголам у AI 3:1, у людей 2:1. Скилл разворачивает номинализации обратно в глаголы.
|
|
343
|
+
|
|
344
|
+
**Работает ли GPTZero на русском языке?** Ненадёжно. GPTZero обучен на английском и на русском даёт много ложных срабатываний: помечает живые человеческие тексты как ИИ, а аккуратный AI-текст пропускает. Подробнее в разделе «Работают ли AI-детекторы на русском».
|
|
345
|
+
|
|
346
|
+
**Почему мой текст помечают как ИИ, хотя я писал его сам?** Частая беда на русском: детекторы, обученные на английском, принимают за «машинность» нормальные свойства русского текста (морфология, длинные слова, формальный регистр). Если текст реально ваш, это ложное срабатывание детектора, а не приговор. Скилл помогает убрать конкретные машинные маркеры (канцелярит, кальки, штампы), от которых текст звучит «нейросетево».
|
|
347
|
+
|
|
348
|
+
**Какой AI-детектор лучший для русского?** Идеального нет. Из специализированных лучше показывают себя fine-tuned модели на базе RuRoBERTa (бенчмарк AINL-Eval 2025, ~86%), но и они проседают между доменами. Универсальные англоязычные (GPTZero, Originality, ZeroGPT) на русском особенно ненадёжны. Практический вывод: ориентируйтесь на реальное качество текста, а не на вердикт одного детектора.
|
|
349
|
+
|
|
350
|
+
**Работает ли это с Claude Sonnet / Opus 4?** Да. Это инструкция-каталог для любой модели Claude. Чем больше контекст модели, тем глубже она применяет правила. На Opus результат заметно сильнее на длинных текстах.
|
|
351
|
+
|
|
352
|
+
**Можно ли использовать без плагина?** Да. Скачайте SKILL.md и используйте как чек-лист для ручной правки или вставляйте в системный промпт любой LLM (ChatGPT, Gemini, YandexGPT, GigaChat).
|
|
353
|
+
|
|
354
|
+
**А если мне нужно длинное тире (я редактор / формальная типографика)?** По умолчанию скилл вычищает все длинные тире «—»: это главный типографический маркер AI, и живой неформальный русский его почти не ставит (с телефона печатают дефис). Но если вам нужна правильная издательская типографика, прямо скажите об этом: «я профессиональный редактор, длинное тире оставляй». Скилл снимет запрет. Сам он это исключение не включает. Решаете вы.
|
|
355
|
+
|
|
356
|
+
## Чем отличается от английского humanizer
|
|
357
|
+
|
|
358
|
+
| | humanizer-ru | blader/humanizer |
|
|
359
|
+
|---|---|---|
|
|
360
|
+
| Язык | Русский | Английский |
|
|
361
|
+
| Паттернов | 64 | 32 |
|
|
362
|
+
| Жёстких банов | 20 | - |
|
|
363
|
+
| Аудит | Quad-pass | Single-pass |
|
|
364
|
+
| Voice calibration | Да | Да |
|
|
365
|
+
| Стилистические фингерпринты 2025-2026 | Да | Нет |
|
|
366
|
+
| Морфология RuBERT-детекторов | Да | - |
|
|
367
|
+
| Macro-burstiness структурных блоков | Да | Нет |
|
|
368
|
+
|
|
369
|
+
Английский humanizer ловит универсальные AI-маркеры. Русские требуют отдельной модели: канцелярит, кальки с английского синтаксиса, частицы «же/ведь/вот», падежные согласования RuBERT-детекторов, морфологические ошибки длинных цепочек, плюс свежие фингерпринты Claude и GPT 2025-2026 («рваная медитативность», эмодзи-декор, псевдо-терапия), которые в англоязычных каталогах ещё не оформлены.
|
|
370
|
+
|
|
371
|
+
## Источники
|
|
372
|
+
|
|
373
|
+
Скилл собран из четырёх независимых источников развития:
|
|
374
|
+
|
|
375
|
+
- **Wikipedia: WikiProject AI Cleanup**: базовый каталог признаков AI-текста на русском
|
|
376
|
+
- **15+ русскоязычных публикаций**: Habr, vc.ru, Gramota.ru, стилометрические исследования ВШЭ, Dialog Conference (RuATD-2022 и AINL-Eval 2025), TechInsider, Kokoc.com
|
|
377
|
+
- **Верифицированные публикации (2024-2026)**: DivEye, PIFE, MASH, Antislop, AINL-Eval, RuATD, NeurIPS 2025 и др. Каждая ссылка и цифра проверена по arxiv и первоисточникам; неподтверждённые удалены. Полная таблица провенанса: [SOURCES.md](SOURCES.md).
|
|
378
|
+
|
|
379
|
+
Changelog: [CHANGELOG.md](CHANGELOG.md). Метрики и eval-харнес: каталоги [`scripts/`](scripts/) и [`eval/`](eval/).
|
|
380
|
+
|
|
381
|
+
## Автор
|
|
382
|
+
|
|
383
|
+
Илья Утов. Пишу про AI и работу с текстом в Telegram: [Under the Hood](https://t.me/gorilla_under_hood).
|
|
384
|
+
|
|
385
|
+
## Контрибьюторы
|
|
386
|
+
|
|
387
|
+
- **Филипп Зарубин** ([@zarubinphil](https://github.com/zarubinphil)): категория N «Дискурсный слой», паттерны 59-64 по StoryScope (COLM 2026). Признаки, которые переживают стилевую правку. Плюс согласование падежа при счётчике в релизном гейте.
|
|
388
|
+
- **iKonushok** ([@ikonushok](https://github.com/ikonushok)): install-smoke установочной поверхности и сборка релизного ZIP. Проверяется не папка в репозитории, а то, что реально доезжает до пользователя.
|
|
389
|
+
|
|
390
|
+
Полный список, включая баг-репорты, которые изменили код: [CONTRIBUTORS.md](CONTRIBUTORS.md). Как попасть в него: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
391
|
+
|
|
392
|
+
## Лицензия
|
|
393
|
+
|
|
394
|
+
MIT: используйте свободно, форкайте, дорабатывайте. Pull request с новыми паттернами приветствуются.
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
**humanizer-ru** помогает очеловечить русский AI-текст: убрать следы нейросети, канцелярит и штампы, вернуть живой голос и сделать текст человечным. Это бесплатный open-source скилл для Claude (Claude Code, Cowork, API), а не онлайн-сервис «в один клик». Почему детекторы AI и проверка текста на нейросеть на русском ненадёжны (и при чём тут антиплагиат): в разделах выше, с реальными данными из нашего eval-харнеса, а не из обещаний.
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Кто это сделал
|
|
403
|
+
|
|
404
|
+
[Илья Утов](https://github.com/ilyautov), лаборатория [AI Frontier](https://aifrontier.tech). Как эти инструменты устроены внутри, пишу в [Telegram](https://t.me/gorilla_under_hood) и [LinkedIn](https://www.linkedin.com/in/ilyautov).
|
|
405
|
+
|
|
406
|
+
**Рядом стоят:**
|
|
407
|
+
|
|
408
|
+
- [**marketplaces-mcp-ru**](https://github.com/ilyautov/marketplaces-mcp-ru): Wildberries, Ozon, Яндекс Маркет и Авито прямо из агента
|
|
409
|
+
- [**small-business-ru**](https://github.com/ilyautov/small-business-ru): 34 скилла для малого бизнеса, считают налоги и проверяют контрагента по ИНН
|
|
410
|
+
- [**consilium-principis**](https://github.com/ilyautov/consilium-principis): совет мыслителей, где каждая цитата сверяется дословно
|
|
411
|
+
- [**hefest**](https://github.com/ilyautov/hefest): химическая безопасность завода, целиком офлайн
|
|
412
|
+
- [**cordon**](https://github.com/ilyautov/cordon): детерминированный слой между недоверенным контентом и действиями агента
|
|
413
|
+
|
|
414
|
+
Все проекты одним списком, разобранные по назначению: [ilyautov.github.io](https://ilyautov.github.io/). Исходники: [github.com/ilyautov](https://github.com/ilyautov). Пригодилось, поставьте звезду: по ней это находят другие.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# ru-humanizer
|
|
2
|
+
|
|
3
|
+
Сканер следов нейросети в русском тексте из проекта
|
|
4
|
+
[humanizer-ru](https://github.com/ilyautov/humanizer-ru). Считает балл чистоты от 0 до 100,
|
|
5
|
+
находит 21 жёсткий запрет и 64 признака машинной манеры, проверяет факт-замок между
|
|
6
|
+
исходником и правкой. Правила откалиброваны на 55 тысячах размеченных русских текстов.
|
|
7
|
+
Работает офлайн, текст никуда не отправляется.
|
|
8
|
+
|
|
9
|
+
mcp-name: io.github.ilyautov/humanizer-ru
|
|
10
|
+
|
|
11
|
+
## Командная строка
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install ru-humanizer
|
|
15
|
+
ru-humanizer статья.md
|
|
16
|
+
ru-humanizer статья.md --genre academic
|
|
17
|
+
echo "текст" | ru-humanizer -
|
|
18
|
+
ru-humanizer чистовик.md --before исходник.md
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Код выхода: 0 чисто, 1 есть жёсткие запреты, 2 в чистовике появился факт, которого
|
|
22
|
+
не было в исходнике. Флаг `--json` отдаёт машинный отчёт.
|
|
23
|
+
|
|
24
|
+
## MCP-сервер
|
|
25
|
+
|
|
26
|
+
Тот же пакет поднимает MCP-сервер по stdio с двумя инструментами:
|
|
27
|
+
|
|
28
|
+
- `scan_text`: балл, штрафы, запреты и маркеры с позициями, ритм, морфология, структура.
|
|
29
|
+
- `compare_texts`: балл «было и стало» и факт-замок: что пропало, что появилось, какие
|
|
30
|
+
кванторы вроде «впервые» или «единственный» возникли без источника.
|
|
31
|
+
|
|
32
|
+
Конфигурация для Claude Desktop, Cursor и других клиентов:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"mcpServers": {
|
|
37
|
+
"humanizer-ru": {
|
|
38
|
+
"command": "uvx",
|
|
39
|
+
"args": ["--from", "ru-humanizer", "ru-humanizer-mcp"]
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Что это не делает
|
|
46
|
+
|
|
47
|
+
Балл считает плотность оборотов, по которым читатель узнаёт машинную манеру. Это не
|
|
48
|
+
вероятность авторства и не детектор: инструмент не обходит проверки и не выносит
|
|
49
|
+
вердиктов, он показывает, что править. Полный каталог признаков, скилл для агентов и
|
|
50
|
+
расширение Chrome лежат в репозитории.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
# Пакет на PyPI: тот же сканер, что едет со скиллом, без копии кода.
|
|
6
|
+
# package-dir показывает на skills/humanizer-ru/scripts, поэтому humanizer_metrics
|
|
7
|
+
# в колесе и в скилле один и тот же файл. Имя humanizer-ru на PyPI занято,
|
|
8
|
+
# отсюда ru-humanizer.
|
|
9
|
+
# Версия одна на весь репозиторий: scripts/bump_release.py протаскивает её сюда.
|
|
10
|
+
[project]
|
|
11
|
+
name = "ru-humanizer"
|
|
12
|
+
version = "3.26.0"
|
|
13
|
+
description = "Сканер следов нейросети в русском тексте: балл чистоты 0-100, 21 жёсткий запрет, 64 признака, факт-замок. CLI и MCP-сервер проекта humanizer-ru."
|
|
14
|
+
readme = "pypi/README.md"
|
|
15
|
+
license = "MIT"
|
|
16
|
+
license-files = ["LICENSE"]
|
|
17
|
+
requires-python = ">=3.10"
|
|
18
|
+
authors = [{ name = "Ilya Utov" }]
|
|
19
|
+
keywords = ["russian", "humanizer", "ai-text", "ai-detector", "mcp", "canceljarit", "nlp"]
|
|
20
|
+
classifiers = [
|
|
21
|
+
"Development Status :: 5 - Production/Stable",
|
|
22
|
+
"Environment :: Console",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"Natural Language :: Russian",
|
|
25
|
+
"Programming Language :: Python :: 3",
|
|
26
|
+
"Topic :: Text Processing :: Linguistic",
|
|
27
|
+
]
|
|
28
|
+
dependencies = ["razdel>=0.5", "pymorphy3>=2.0"]
|
|
29
|
+
|
|
30
|
+
[project.urls]
|
|
31
|
+
Homepage = "https://humanizer-ru.aifrontier.tech/"
|
|
32
|
+
Repository = "https://github.com/ilyautov/humanizer-ru"
|
|
33
|
+
Changelog = "https://github.com/ilyautov/humanizer-ru/blob/main/CHANGELOG.md"
|
|
34
|
+
|
|
35
|
+
[project.scripts]
|
|
36
|
+
# ru-humanizer = scripts/scan.py как есть: модуль scan лежит в папке скрипта,
|
|
37
|
+
# которая ставится пакетом ru_humanizer_cli (см. package-dir ниже).
|
|
38
|
+
ru-humanizer = "ru_humanizer_cli.scan:main"
|
|
39
|
+
ru-humanizer-mcp = "humanizer_metrics.mcp_server:main"
|
|
40
|
+
|
|
41
|
+
[tool.setuptools]
|
|
42
|
+
packages = ["humanizer_metrics", "ru_humanizer_cli"]
|
|
43
|
+
|
|
44
|
+
[tool.setuptools.package-dir]
|
|
45
|
+
humanizer_metrics = "skills/humanizer-ru/scripts/humanizer_metrics"
|
|
46
|
+
ru_humanizer_cli = "skills/humanizer-ru/scripts"
|