БлогNot. Как извлечь данные из файла Analyses.log "Арены"

Как извлечь данные из файла 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 [236 просмотров]


теги: шахматы textprocessing софт php форматы памятка