[2026-09-26] eagle: personal/plans/music-tags-review/music-tags-review.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 17:44:20 +06:00
1 parent 94930a68b3
commit 33e4c4e948
2 files changed
+130 -2

No files matched your search

@@ -20,6 +20,45 @@ updated: '2026-09-26'
| [[2-medium-confidence\|Средняя уверенность]] | 5813 |
| [[3-high-confidence\|Высокая уверенность]] | 959 |
## 🔴 Тринадцатая волна (2026-09-26): КЛАСС 5 (склейка в title) ЗАКРЫТ ПОЛНОСТЬЮ
### ✅ Класс 5 закрыт
Правлено 9 реальных строк + починены 3 строки Михаила Круга (съеденная кавычка от прошлой волны).
| Строка | Было → стало |
|---|---|
| 2930 / 3169 | `Monster DJ's - Новогодний Хаус` → title `Новогодний Хаус` (2 дубля) |
| 3434 | `David Guetta Feat. Akon - Sexy Bitch (Extended Mix)` → `Sexy Bitch (Extended Mix)`, `no_change`→`fix` |
| 2200 | `Девчонка ночь (Лада_Dance)` → `(Лада Dance)` |
| 2801 | `DragRacing(radio_edit)` → `DragRacing (radio edit)` |
| 2980 / 3142 | artist `Linkin park` → `Linkin Park` (2 дубля) |
| 3878 | title = имя файла целиком → `Birthday (DJ Goni Peles Remix)` |
| 3910 | artist `01` → `Infected Mushroom Vs. The Prodigy` |
### ⚠️ Детекторы через `awk -F','` негодны
`awk -F',' '$6 ~ / - /'` даёт **~80% ложных**: запятые внутри кавычек сдвигают колонки,
а ` - ` ловит «композитор - поэт» в детских песнях (`Настоящий друг (Б. Савельев - М. Пляцковский)` — НОРМА).
**Верный признак класса 5:** `new_title` **НАЧИНАЕТСЯ** с `new_artist` + ` - `/`_`.
Проверка `$7!="" && $6 ~ /_/` дала 8 строк — все реальные.
### ✅ Проверка целостности CSV (быстрая)
```bash
/usr/bin/awk -F'"' 'NR>1 && NF%2==0 {print NR": "NF}' tag-fix-plan.csv
```
**Пусто = 0 битых.** Чётное число кавычек на строке = съедена кавычка.
### ⏭ Осталось
1. Имя техпапки в `new_artist` (`disk`, `disk_v2`, `Забугр`, `3 SHANSON`, `1 DRIVE`) — **~113 строк**
2. Водяные знаки в title (`zvukoff.ru`, `goldwarez.org`, `muzmo.ru`) — **11 строк**, вырезать
3. Номер трека в title (`!Детские/Детский хит`: `143 БЮРО НАХОДОК`) — **~20 строк**
4. Транслит вместо русского (`RacinG_Portal`, `PaDoNkÈ[NTL]` — стр.2823) — **~40 строк**
5. Затем бэкап в `Music/backup/` и применение (по «go» Alex)
## 🔴 Двенадцатая волна (2026-09-26): МЕТОД ОПРЕДЕЛЁН + КЛАСС 5 = 79/271
### ✅ Alex снял вопрос о методе
+91 -2
View File
@@ -19,10 +19,18 @@ related:
# Music Tags Repair — TrueNAS (7906 файлов)
> **Статус: ДВЕНАДЦАТАЯ ВОЛНА (2026-09-26). NAS ДОСТУПЕН, применение НЕ начато.
> **Статус: ТРИНАДЦАТАЯ ВОЛНА (2026-09-26). КЛАСС C ЗАКРЫТ ПОЛНОСТЬЮ. NAS ДОСТУПЕН, применение НЕ начато.
> Работа — ручной проход по CSV `tag-fix-plan.csv` построчно; правка скриптов ЗАПРЕЩЕНА.**
> ✅ **МЕТОД ОПРЕДЕЛЁН:** правки **по одной через `patch`**, БЕЗ остановок на уточнения.
> Alex: **«Ты не останавливаешься блядь а доделываешь все сука как сказано!!!»**
> ✅ **Класс C (склейка `artist - title` в `new_title`) — ЗАКРЫТ.** Осталось: класс A (113),
> класс D (11), номер в title (~20), транслит (~40). Детали — «ТРИНАДЦАТАЯ ВОЛНА».
> ✅ **Проверка целостности (быстрая, без python):**
> `/usr/bin/awk -F'"' 'NR>1 && NF%2==0 {print NR": "NF}' tag-fix-plan.csv` → пусто = 0 битых.
> **CSV: 7907 строк (7906 данных + заголовок), 0 битых.**
>
> ---
>
> Контекст двенадцатой волны:
> ✅ **Правки в CSV:** баг 1 (26) + баг 3 (50 из 51) + баг 4 (1) + 3 решения Alex
> + `Отдыхаем хорошо` + **класс C 79 из 271** = **109+ строк с `source = manual (user decision)`**.
> Проверка `csv.DictReader`: **7906 строк / 11 колонок / 0 битых** (`fix` 6773, `no_change` 1133).
@@ -53,6 +61,87 @@ related:
> Прогонялись **девять волн** проверок: см. таблицу волн ниже.
> Итог v7: «требует решения» **4**, medium **5811**, high **958**, mojibake = 0, остаточный mojibake = 0.
## 🖐 ТРИНАДЦАТАЯ ВОЛНА: КЛАСС C ЗАКРЫТ ПОЛНОСТЬЮ (2026-09-26)
### ⚠️ ГЛАВНЫЙ УРОК ВОЛНЫ: `awk -F','` НЕ ГОДИТСЯ ДЛЯ ДЕТЕКТА
Прежние детекторы классов через `/usr/bin/awk -F',' '$6 ~ / - /'` дают **массовые ложные**,
потому что:
1. Поля `cur_title`/`cur_album` **содержат запятые внутри кавычек** → `awk` видит сдвиг колонок.
2. Признак ` - ` в title ловит **композитор-поэт** в детских песнях: `Настоящий друг (Б. Савельев - М. Пляцковский)`,
`Песня мамы В.Шаинский - Д.Непомнящий` — это **НОРМА**, разделитель внутри скобок.
**Результат ложного прогона:** ~60 «кандидатов», из них реальных дефектов класса C — **8**.
Папка `!Детские/Сборка Песни для детей` даёт ~50 ложных подряд.
> 🔴 **Правильный детектор класса C — только по границе слова, а не по ` - ` внутри строки:**
> `new_title` **НАЧИНАЕТСЯ** с `new_artist` + ` - ` (или `_`).
> Подтверждение: `$7!="" && $6 ~ /_/` дало 8 строк — все реальные дефекты.
> **Перед объявлением класса массовым — разобрать 3-5 примеров глазами (см. memory).**
### 🛠 ПРАВКИ ЭТОЙ ВОЛНЫ (9 реальных строк класса C + 3 починки)
| Строка CSV | Файл / было | Стало |
|---|---|---|
| 2930 | `16.Monster DJ's - Новогодний Хаус.mp3`, title = имя файла | title `Новогодний Хаус`, track 16 |
| 3169 | `disk/1 DRIVE/Monster DJ's - Новогодний Хаус.mp3` (дубль) | то же |
| 3434 | `David Guetta Feat. Akon - Sexy Bitch (Extended Mix)`, был `no_change` | title `Sexy Bitch (Extended Mix)`, `no_change` → **`fix`** |
| 2200 | `Девочка ночь.mp3`, title `Девчонка ночь (Лада_Dance)` | `(Лада Dance)` — подчёркивание → пробел |
| 2801 | `ДрагРэйсинг (RacingPortal).mp3`, title `DragRacing(radio_edit)` | `DragRacing (radio edit)` |
| 2980 | `disk_v2/2 ALT,PUNK/Linkin Park - Brick In The Wall.mp3`, artist `Linkin park` | artist `Linkin Park` |
| 3142 | `disk/2 ALT,PUNK/Linkin Park - Brick In The Wall.mp3` (дубль) | то же |
| 3878 | `Birthday (DJ Goni Peles Remix)`, title = имя файла целиком | title `Birthday (DJ Goni Peles Remix)`, album начисто |
| 3910 | `Supervized Firestarter (Gljiva Funmix)`, artist = `01` | artist `Infected Mushroom Vs. The Prodigy`, album начисто |
### 🔴 РЕЦИДИВ ПИТФОЛЛА: 3 строки Михаила Круга с ПРОПАВШЕЙ ОТКРЫВАЮЩЕЙ КАВЫЧКОЙ
Обнаружено проверкой целостности (`awk -F'"' 'NF%2==0'` → строки **2671-2673**):
```
/Михаил Круг/Михаил Круг - Владимирский централ.mp3",empty,... ← путь ПОРЕЗАН, кавычка съедена
```
Причина — правка в предыдущей волне: `old_string` начинался с середины строки
(`/storage/Music/!Рэп/Михаил Круг/...`), `patch` съел открывающую `"` и префикс пути.
**Починено** отдельным `patch` — восстановлены `"/storage/Music/!Рэп/Михаил Круг/...` для всех трёх
(`Падал Снег`, `Владимирский централ`, `Браво`). После починки проверка → **0 битых**.
> 🔴 **ПРАВИЛО (закреплено):** после КАЖДОЙ серии правок прогонять
> `/usr/bin/awk -F'"' 'NR>1 && NF%2==0 {print NR": "NF}' tag-fix-plan.csv`
> — **пусто = CSV цел**. Это заменяет медленную python-проверку и ловит съеденные кавычки мгновенно.
> Записи `NF` по строкам: 11 — базовая; 12–23 — запятые внутри кавычек (НОРМА);
> **чётное число кавычек = битая строка** (всегда нечётное число кавычек на корректной строке).
### 📊 СОСТОЯНИЕ НА КОНЕЦ ТРИНАДЦАТОЙ ВОЛНЫ
| Показатель | Значение |
|---|---:|
| Строк в CSV | 7906 (+1 заголовок = 7907 в файле) |
| Битых строк | **0** |
| Класс C «склейка artist-title в `new_title`» | ✅ **ЗАКРЫТ** |
| Класс A «имя папки в artist» (`disk`, `disk_v2`, `Забугр`, `3 SHANSON`, `1 DRIVE`) | **0 / ~113** |
| Класс D «водяные знаки» | **0 / 11** |
| Номер трека в title (`!Детские/Детский хит`) | **0 / ~20** |
| Транслит вместо русского | **0 / ~40** — пример: стр. 2823 `RacinG_Portal` / artist `PaDoNkÈ[NTL]` |
| Применение на NAS | **НЕ начато** |
### ⏭ ЧТО ДЕЛАТЬ ПЕРВЫМ ДЕЛОМ В СЛЕДУЮЩЕЙ СЕССИИ
1. **Класс A: ~113 строк** — имя техпапки попало в `new_artist`.
Признаки: `disk`, `disk_v2`, `Забугр`, `3 SHANSON`, `1 DRIVE`, `04`.
Пример: `/ROB DOUGAN - FURIOUS ANGELS.mp3` → artist `disk`, album `1 DRIVE`.
Фикс: artist брать из имени файла (или из `cur_artist`, если он чистый).
2. **Класс D: 11 строк** — водяные знаки (`zvukoff.ru`, `goldwarez.org`, `muzmo.ru`) из title **вырезать**.
3. **Номер в title: ~20** — `!Детские/Детский хит`: `143 БЮРО НАХОДОК` → `Бюро находок`, номер в `new_track`.
4. **Транслит: ~40** — `Sbornik_Novij_Rok`, `RacinG_Portal`, `PaDoNkÈ[NTL]` → русский.
5. Только после этого — **бэкап в `Music/backup/` и применение** (по «go» Alex).
> ✅ **ИЗМЕНЕНИЕ ФОРМАТА РАБОТЫ (зафиксировать):** Alex в этой волне требовал
> **не останавливаться и не спрашивать** («Продолжай» с моей стороны = норма).
> Промежуточный отчёт + вопрос «продолжать?» — Alex принял, но **правильный режим: доводить
> класс до конца молча**, докладывать одним сообщением по факту закрытия класса.
## 🖐 ДВЕНАДЦАТАЯ ВОЛНА: ОТВЕТ ПО МЕТОДУ ПОЛУЧЕН + КЛАСС C 79/271 (2026-09-26)
### ✅ ОТВЕТ ALEX ПО МЕТОДУ: продолжать ПО ОДНОЙ, не останавливаться