humanizer-ru 3.27.0 → 3.28.0
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.
package/README.en.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Claude Code / Cowork plugin. Kills AI smell in Russian text. The English [humanizer](https://github.com/blader/humanizer) won't help here. Russian AI markers are their own beast: bureaucratic noun-chains (канцелярит), English-syntax calques, missing particles like "же" and "ведь" that make Russian sound alive.
|
|
6
6
|
|
|
7
7
|
[](LICENSE)
|
|
8
|
-
[](https://github.com/ilyautov/humanizer-ru/blob/main/CHANGELOG.md)
|
|
9
9
|
[](https://github.com/ilyautov/humanizer-ru/stargazers)
|
|
10
10
|
[](https://skills.sh/ilyautov/humanizer-ru/humanizer-ru)
|
|
11
11
|
[](https://www.npmjs.com/package/humanizer-ru)
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
> [English version](README.en.md) · [中文](README.zh.md)
|
|
6
6
|
|
|
7
7
|
[](LICENSE)
|
|
8
|
-
[](https://github.com/ilyautov/humanizer-ru/blob/main/CHANGELOG.md)
|
|
9
9
|
[](https://github.com/ilyautov/humanizer-ru/stargazers)
|
|
10
10
|
[](https://skills.sh/ilyautov/humanizer-ru/humanizer-ru)
|
|
11
11
|
[](https://www.npmjs.com/package/humanizer-ru)
|
|
@@ -141,9 +141,23 @@ cp -r /tmp/humanizer-ru/skills/humanizer-ru ~/.claude/skills/
|
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
Копируйте папку целиком, а не один SKILL.md: вместе со скиллом едет
|
|
144
|
-
детерминированный сканер `scripts/scan.py` (машинная половина режима
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
детерминированный сканер `scripts/scan.py` (машинная половина режима «Аудит»).
|
|
145
|
+
Ему нужны пакеты `razdel` и `pymorphy3`. Без них скилл проводит аудит вручную
|
|
146
|
+
и обязан сказать об этом; балла «Чистота: N/100» вы не увидите.
|
|
147
|
+
|
|
148
|
+
Как поставить зависимости. На macOS с Python из Homebrew и на Debian/Ubuntu
|
|
149
|
+
голый `pip install` падает с `externally-managed-environment` (PEP 668),
|
|
150
|
+
поэтому любой из трёх способов:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
uvx ru-humanizer файл.txt # без установки, нужен uv
|
|
154
|
+
pipx install ru-humanizer # команда ru-humanizer в PATH
|
|
155
|
+
python3 -m venv ~/.humanizer-ru && ~/.humanizer-ru/bin/pip install razdel pymorphy3
|
|
156
|
+
~/.humanizer-ru/bin/python ~/.claude/skills/humanizer-ru/scripts/scan.py файл.txt
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Проверка, что сканер живой: `python3 ~/.claude/skills/humanizer-ru/scripts/scan.py --help`
|
|
160
|
+
без строки `[ошибка]`.
|
|
147
161
|
|
|
148
162
|
### 4. Codex CLI (OpenAI)
|
|
149
163
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanizer-ru",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.28.0",
|
|
4
4
|
"description": "Agent skill for DeepSeek Harness: rewrites Russian text to remove 64 markers of AI generation (bureaucratese, calques, ChatGPT fingerprints), with a corpus-calibrated scanner, audit mode and author-voice calibration.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ilya Utov",
|
|
@@ -4,7 +4,7 @@ description: "Качество русского текста для агента
|
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Humanizer-RU v3.
|
|
7
|
+
# Humanizer-RU v3.28.0
|
|
8
8
|
|
|
9
9
|
Ты редактор. Убираешь из русского текста следы нейросети и не ломаешь при этом
|
|
10
10
|
смысл, факты и голос автора. Оба обещания равноправны: текст, который стал «чище»
|
|
@@ -50,8 +50,11 @@ license: MIT
|
|
|
50
50
|
прогони текст: `python3 <папка скилла>/scripts/scan.py файл.txt` или
|
|
51
51
|
`echo "текст" | python3 <папка скилла>/scripts/scan.py -`. Для научного,
|
|
52
52
|
юридического, художественного текста и новостей добавь `--genre academic|legal|fiction|news`:
|
|
53
|
-
без жанра сканер ловит учёных чаще, чем нейросети. Запомни балл «было». Пакетов
|
|
54
|
-
|
|
53
|
+
без жанра сканер ловит учёных чаще, чем нейросети. Запомни балл «было». Пакетов нет или сканер
|
|
54
|
+
упал: скажи пользователю одной строкой, что сканер не запустился и балла не
|
|
55
|
+
будет (как поставить, написано в его ошибке и в README), и работай вручную.
|
|
56
|
+
Молча пропускать сканер нельзя: без балла правка не измерима, а пользователь
|
|
57
|
+
месяцами не узнает, что половина скилла не работает. Балл на глаз не придумывай.
|
|
55
58
|
|
|
56
59
|
**Чтение целиком.** Определи задачу текста, регистр (маркетинг, экспертный, деловой,
|
|
57
60
|
научный, документация, юридический, художественный) и позицию, которую автор уже
|
|
@@ -109,7 +112,7 @@ JOIN (убрать дублирование соседних фраз), SPLIT (
|
|
|
109
112
|
| «Играет важную/ключевую роль» | Оставь только то, ПОЧЕМУ важно, если это есть в тексте |
|
|
110
113
|
| «Можно с уверенностью сказать» | Скажи без преамбулы |
|
|
111
114
|
| «Подводя итог», «Таким образом,» в начале вывода | Убери или начни вывод с действия. «Устроен таким образом, что» не маркер |
|
|
112
|
-
| Длинное тире «—» и короткое «–» вне числовых диапазонов | Запятая, двоеточие, точка, дефис или перестройка.
|
|
115
|
+
| Длинное тире «—» и короткое «–» вне числовых диапазонов | Запятая, двоеточие, точка, дефис или перестройка. Убирается всегда; оставить тире можно только по явной просьбе пользователя |
|
|
113
116
|
| «От X до Y» для несвязанных понятий | Перечисли конкретно или убери |
|
|
114
117
|
| «Погрузимся в...», «Давайте посмотрим поближе», «И вот здесь начинается самое интересное» | Удали анонс, сразу пиши суть |
|
|
115
118
|
| «Раскрыть потенциал», «Вывести на новый уровень», «Открывает новые горизонты/перспективы/возможности» | Конкретный результат, если он назван в тексте; иначе удали |
|
|
@@ -57,6 +57,9 @@ STERILE_MIN_WORDS = 100
|
|
|
57
57
|
# них настоящие авторские обрывки.
|
|
58
58
|
STACCATO_PENALTY = 8
|
|
59
59
|
STACCATO_PENALTY_MAX = 14
|
|
60
|
+
# Потолок штрафа за номинальность. Именованный, потому что браузерный сканер
|
|
61
|
+
# морфологии не имеет и объявляет ровно эту величину как неизмеренную.
|
|
62
|
+
NV_PENALTY_MAX = 8
|
|
60
63
|
|
|
61
64
|
|
|
62
65
|
@dataclass
|
|
@@ -168,7 +171,7 @@ def cleanliness_score(report, genre: str | None = None) -> ScoreResult:
|
|
|
168
171
|
# легитимно номинален), поэтому штраф мягкий и низко ограничен.
|
|
169
172
|
nv = report.morph.noun_verb_ratio
|
|
170
173
|
if nv > NV_TARGET:
|
|
171
|
-
pen = min(
|
|
174
|
+
pen = min(NV_PENALTY_MAX, round((nv - NV_TARGET) / 0.5 * 3))
|
|
172
175
|
if pen:
|
|
173
176
|
score -= pen
|
|
174
177
|
penalties.append((f"номинальность (сущ./глаг.={nv}, цель ≤{NV_TARGET})", -pen))
|
|
@@ -30,8 +30,15 @@ try:
|
|
|
30
30
|
from humanizer_metrics.morphology import morph_verdict
|
|
31
31
|
from humanizer_metrics.structure import structure_verdict
|
|
32
32
|
except ImportError as exc:
|
|
33
|
-
print(f"[ошибка] не хватает зависимостей сканера ({exc.name})
|
|
34
|
-
"Поставьте один
|
|
33
|
+
print(f"[ошибка] не хватает зависимостей сканера ({exc.name}); балла не будет.\n"
|
|
34
|
+
"Поставьте один раз любым способом:\n"
|
|
35
|
+
" uvx ru-humanizer файл.txt (без установки, нужен uv)\n"
|
|
36
|
+
" pipx install ru-humanizer (даёт команду ru-humanizer)\n"
|
|
37
|
+
" python3 -m venv ~/.humanizer-ru && ~/.humanizer-ru/bin/pip install razdel pymorphy3\n"
|
|
38
|
+
" и запускайте ~/.humanizer-ru/bin/python scan.py файл.txt\n"
|
|
39
|
+
"Голый pip install на macOS с Homebrew и на Debian/Ubuntu падает с\n"
|
|
40
|
+
"externally-managed-environment (PEP 668): системный Python закрыт для pip.",
|
|
41
|
+
file=sys.stderr)
|
|
35
42
|
raise SystemExit(2)
|
|
36
43
|
|
|
37
44
|
|