Как извлечь данные из файла Analyses.log "Арены"
Традиционно интересуясь работой В.А. Полоудина, посмотрел на его анализ первых двух партий матча Карлсен - Непомнящий. Захотелось тоже построить наглядные графики и посмотреть, что получается.
Заметка касается техники извлечения данных из анализа, сделанного нашим компьютерным "гроссмейстером". Коротко говоря, был бы формат, а вытащить оттуда нужные данные несложно.
Партии я "прогнал" анализом актуального Стокфиша 14.1 из-под "Арены" (загрузить движок и файл PGN, заглянуть в меню Движки - Конфигурация анализа движка, потом Движки - Автоматический анализ, настраиваем время и глубину на вкладке "Движки", жмём "Пуск" на вкладке "Источник").
На выходе можно получить файл ПАПКА_АРЕНЫ\Analyses.log
с таким форматом:
Анализ от D:\Temp\1.pgn Партия 1 / 1 Nepomniachtchi, Ian - Carlsen, Magnus, Dubai, United Arab Emirates, 2021.11.26 (C88) 21.12.2021 13:55:59 Уровень: 30 Секунд Анализирующий движок: Stockfish_14.1_win_x64_avx2 1. e2-e4 Лучший ход (Stockfish_14.1_win_x64_avx2): e2-e4 Identical moves! Найдено в: 00:19 8/8 00:00 7k 1 400k +0,50 e2-e4 e7-e5 Ng1-f3 Nb8-c6 d2-d4 e5xd4 Nf3xd4 Ng8-f6 Nb1-c3 //...другие варианты (глубина, время оценки, память, вариант) 31/42+ 00:29 38 692k 1 292k +0,49 e2-e4 21.12.2021 12:52:26, Time for this analysis: 00:00:30, Расчетное время: 00:19 1. ..e7-e5 Лучший ход (Stockfish_14.1_win_x64_avx2): e7-e6 Не найден в: 00:30 8/11 00:00 1k 745k +0,51 e7-e6 d2-d4 d7-d5 Nb1-c3 Ng8-f6 Bc1-g5 Bf8-e7 e4-e5 ... //... 32/39 00:27 35 534k 1 280k +0,38 e7-e6 d2-d4 d7-d5 Nb1-c3 Ng8-f6 e4-e5 Nf6-d7 f2-f4 ... 21.12.2021 12:52:57, Time for this analysis: 00:00:30, Расчетное время: 00:49 //...
Убрав строки до первого хода и перекодировав файл в кодировку Юникода UTF-8, его можно обработать скриптом на локальном хосте, извлекая нужные данные и получив в браузере файл формата .csv нужного вида, который можно сохранить и потом открыть в Excel для дальнейшего анализа (Excel может потребовать, чтобы файл опять был в кодировке Windows-1251, перекодировать удобнее всего прямо в Far Manager).
На всякий случай прикрепляю быстро написанный код на PHP, пример получаемого файла CSV и другие файлы касательно этих двух партий.
<?php mb_internal_encoding("UTF-8"); $file = file('1.log'); $s = 'Номер хода;Сделанный ход;Лучший ход;Найден ли лучший ход;Время оценки;Мин.оценка;Макс.оценка'; $min = 1000; $max = -1000; for ($line = 0;$line < count($file);$line++) { if (mb_strlen(trim($file[$line]))==0) continue; $move = explode(". ",$file[$line]); if (count($move) == 2) { $s .= "\n"; if (mb_strpos($move[1],'..') === 0) $move[1] = mb_substr($move[1],2); $s .= $move[0].';'.trim($move[1]); } else { $move = explode(": ",$file[$line]); if (count($move) == 2) { if (mb_strpos($move[0],'Лучший ход')!==false) $s .= ';'.trim($move[1]); else { if (mb_strpos($move[0],'Identical moves')!==false) $s .= ';1;'.trim($move[1]); else if (mb_strpos($move[0],'Не найден в')!==false) $s .= ';0;'.trim($move[1]); } } else { $move = explode("\t",$file[$line]); if (count($move) == 6) { $move[4] = floatval(str_replace (",",".",$move[4])); if ($move[4] > $max) $max = $move[4]; else if ($move[4] < $min) $min = $move[4]; } else { $move = explode(":",$file[$line]); if (count($move) == 8) { $min = str_replace (".",",",strval($min)); $max = str_replace (".",",",strval($max)); $s .= ';'.$min.';'.$max; $min = 1000; $max = -1000; } } } } } echo '<pre>'.print_r($s,true).'</pre>'; ?>
Начало полученного в браузере файла:
Номер хода;Сделанный ход;Лучший ход;Найден ли лучший ход;Время оценки;Мин.оценка;Макс.оценка 1;e2-e4;e2-e4;1;00:19;0,28;0,59 1;e7-e5;e7-e6;0;00:30;0,29;0,51 2;Ng1-f3;Ng1-f3;1;00:00;0,26;0,56 2;Nb8-c6;Nb8-c6;1;00:00;0,19;0,49 3;Bf1-b5;Bf1-b5;1;00:00;0,27;0,44 //...
Архив .zip с файлами .pgn, .csv, .xlsx этой статьи (36 Кб)
21.12.2021, 15:08 [519 просмотров]