In wangjinzhuo / pgd [^ 1], about 260,000 professional game record data are stored in SGF format [^ 2].
It is an abbreviation for Smart Game Format (Smart Go Format) and is often used to save Go game records. (Rather, I've never seen anything other than Go ...) The following is an example of SGF data [^ 2], where KM represents Komi, B and W represent black and white, respectively, and the two letters in [] represent the position.
(;FF[4]GM[1]SZ[19]
GN[Copyright goproblems.com]
PB[Black]
HA[0]
PW[White]
KM[5.5]
DT[1999-07-21]
TM[1800]
RU[Japanese]
;AW[bb][cb][cc][cd][de][df][cg][ch][dh][ai][bi][ci]
AB[ba][ab][ac][bc][bd][be][cf][bg][bh]
C[Black to play and live.]
(;B[af];W[ah]
(;B[ce];W[ag]C[only one eye this way])
(;B[ag];W[ce]))
(;B[ah];W[af]
(;B[ae];W[bf];B[ag];W[bf]
(;B[af];W[ce]C[oops! you can't take this stone])
(;B[ce];W[af];B[bg]C[RIGHT black plays under the stones and lives]))
(;B[bf];W[ae]))
(;B[ae];W[ag]))
git clone https://github.com/wangjinzhuo/pgd.git #Dataset download
pip install -U sgf #Installation of sgf parser
You can read the game by writing as follows.
# -*- coding: utf-8 -*-
import sgf
fpath = u"All/(Kaei 2 years)1849-10-8_None_Yuzo Ota 7th Dan_None_Honinbo Shusaku 6th Dan_None_B+4 eyes.sgf"
print(fpath)
game_tree = sgf.parse(open(fpath).read()).children[0]
node = game_tree.root
while node:
print(node.properties)
node = node.next
All/(Kaei 2 years)1849-10-8_None_Yuzo Ota 7th Dan_None_Honinbo Shusaku 6th Dan_None_B+4 eyes.sgf
{'SZ': ['19'], 'C': ['\xcc\xab\xcc\xef\xd0\xdb\xb2\xd8 = Ota Yuzo, \xb1\xbe\xd2\xf2\xb7\xbb\xd0\xe3\xb2\xdf = Honinbo Shusaku'], 'PW': ['\xb1\xbe\xd2\xf2\xb7\xbb\xd0\xe3\xb2\xdf \xc1\xf9\xb6\xce'], 'RE': ['B+4\xc4\xbf'], 'PB': ['\xcc\xab\xcc\xef\xd0\xdb\xb2\xd8 \xc6\xdf\xb6\xce'], 'PC': [''], 'FF': ['3'], 'DT': ['(\xbc\xce\xd3\xc02\xc4\xea)1849-10-8'], 'HA': ['\xcf\xc8\xcf\xe0\xcf\xc8, \xcf\xc8\xb7\xac']}
{'B': ['qd']}
{'W': ['dc']}
{'B': ['pq']}
{'W': ['qo']}
...
{'W': ['rn']}
{'B': ['sm']}
{'W': ['jb']}
{'B': ['sp']}
{'W': ['no']}
{'C': ['\xb9\xb2289\xca\xd6. \xba\xda4\xc4\xbf\xca\xa4.'], 'B': ['sq']}
If you use GNU GO [^ 3], you can also display it on the board in CUI format. You can install it on macOS with the following command.
brew tap homebrew/games
brew install gnu-go
If you want to display up to the 100th move, you can display it by writing as follows.
$ gnugo --mode ascii -l "All/(Kaei 2 years)1849-10-8_None_Yuzo Ota 7th Dan_None_Honinbo Shusaku 6th Dan_None_B+4 eyes.sgf" -L 100 --quiet
Beginning ASCII mode game.
Board Size: 19
Handicap 0
Komi: 5.5
Move Number: 99
To Move: white
Computer player: White
white(100): Q12
White (O) has captured 1 pieces
Black (X) has captured 3 pieces
A B C D E F G H J K L M N O P Q R S T Last move: White Q12
19 . . . . . . . . . . . . . . . . . . . 19
18 . . . . . O O . . . . . . . . . O . . 18
17 . O O O O X O X . . X . . . O . . . . 17
16 . X O X O X X X . + . . O . . + X . . 16
15 . . X X X O . . . . . . . . . X . . . 15
14 . . X . O . . . . . . . . . . . . . . 14
13 . X X X X O . . . . . . . . . . . . . 13
12 X . X O O O . . . . . . . . .(O). . . 12
11 . X O . . . . . . . . . . . . . O . . 11
10 . O . + . . . . . + . . . . X X X X . 10
9 . . . . . . . . . . . . . O X O X . . 9
8 . . . X . . . . . . . . . . O O O X . 8
7 . . . . . . . . . . . O O . O X X . . 7
6 . X . X . . . . . . O X O . X O X . . 6
5 . . . O . . . X X X X X O . . O O . . 5
4 . . . + . . O O O O X . X O O O X O . 4
3 . . . O . . . . . . O . X . X X X X . 3
2 . . . . . . . . . . . . . . . . . . . 2
1 . . . . . . . . . . . . . . . . . . . 1
A B C D E F G H J K L M N O P Q R S T
If you use GoGui [^ 4], you can also view it in GUI format.
If you are using macOS, you can install it with the following command.
brew tap homebrew/games
brew install go-gui
Go Gui will start up with the following command.
gogui
References
Recommended Posts