diff --git a/personal/plans/music-tags-review/music-tags-review.md b/personal/plans/music-tags-review/music-tags-review.md index 08afab92..c32f9733 100755 --- a/personal/plans/music-tags-review/music-tags-review.md +++ b/personal/plans/music-tags-review/music-tags-review.md @@ -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 снял вопрос о методе diff --git a/personal/tech/music-tags-repair-truenas.md b/personal/tech/music-tags-repair-truenas.md index 1046b7cf..d2370943 100755 --- a/personal/tech/music-tags-repair-truenas.md +++ b/personal/tech/music-tags-repair-truenas.md @@ -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 ПО МЕТОДУ: продолжать ПО ОДНОЙ, не останавливаться