Aplicação programada em Java, com bibliotecas organizadas em módulos.
A extração de jogos, sua função mais notável, é baseada em um analisador que combina um analisador lexical com um analisador sintático.
A versão inicial deste analisador permitiu a extração de jogos em notação algébrica em vários idiomas
A partir da versão v1.26, a extração de jogos usando notação algébrica das peças é permitida
Esta nova função foi desenvolvida aprimorando o analisador de jogos existente para incluir uma camada que traduz imagens de peças em suas iniciais correspondentes.
Um tradutor de imagem para inicial foi implementado usando o algoritmo vizinho mais próximo com K 1
O tradutor escolhe a opção mais próxima com base em uma medida de erro dos exemplos rotulados que definiu.
Outra característica interessante introduzida na versão 1.20 é o reconhecimento de posição. O aplicativo tenta determinar a string FEN da posição analisando uma imagem do tabuleiro de xadrez.
Esta funcionalidade é baseada em teorias de um artigo IEEE que eu comprei para referência:
- Destina-se a determinar as posições das praças no tabuleiro de xadrez, detectando seus lados.
- Se for bem sucedido, o aplicativo atravessa todos os quadrados e tenta reconhecer as peças em cada quadrado. O aplicativo tentará identificar a peça com o algoritmo vizinho mais próximo se um quadrado estiver vazio.
- Se todos os quadrados forem identificados com sucesso, presume-se que o conselho também seja identificado com sucesso.
- Se o usuário não conseguir identificar todos os quadrados, o aplicativo mostrará a placa com os quadrados reconhecidos e pedirá para completá-la para mais exemplos para identificar completamente a placa.
Quando os jogos são extraídos de um PDF, o leitor de tabuleiro é auto-treinado usando imagens de posições conhecidas, o que o ajuda a aprender a identificar quadrados com peças
A versão 1.20 introduz um novo recurso que extrai dados do jogo meta, incluindo nomes de jogadores, classificações ELO, datas e locais.
Este recurso utiliza um sistema de expressões regulares que acomoda vários formatos de dados meta que encontrei durante os testes.
Outra característica interessante adicionada no v1.20 é a opção de se conectar a motores semelhantes a UCI, como Stockfish.
Eu desenvolvi um configurador de motor genérico para esse recurso. Ele lê a configuração do motor na conexão e gera um formulário para os usuários modificarem as opções do motor.
Na versão v1.26, foi adicionado suporte para extrair jogos em notação algébrica de figuras.
Desde a versão 1.30, o aplicativo inclui um novo binário que permite criar um PDF a partir de um arquivo.pgn, com duas opções: um aplicativo de interface gráfica ou uma opção de aplicativo de linha de comando para automatizar o processo.
A versão v1.33 adiciona suporte para trabalhar com PDFs digitalizados.