【Python】【正規表現】【将棋ネタ】将棋の棋譜ファイル(KIF形式)から指し手のみを抽出する

はじめに

Pythonを使ってKIF形式で保存された将棋の棋譜ファイルから指し手のみを抽出してみました。
将棋の初段を目指すと決心したのですが横道にそれてばかりです。
将棋の勉強と言うより、将棋を題材としてPythonを勉強している感じになっています(笑)。今回は正規表現の学習になりました。

Pythonスクリプト

import re

trans1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
trans2 = ['一', '二', '三', '四', '五', '六', '七', '八', '九']

with open('shogigui.kif', 'r') as f:
    kifu = f.read()

for x in range(9):
    kifu = kifu.replace(trans1[x], str(x+1))
    kifu = kifu.replace(trans2[x], str(x+1))

kifu = kifu.replace('\u3000', '')

sashite = [x.groups(1)[0] 
    for x in re.finditer('^\s*[0-9]+\s+(\S+).*$', 
    kifu, 
    flags=re.MULTILINE)]

for x in range(1, len(sashite)):
    if ('同' in sashite[x]):
        sashite[x] = sashite[x].replace('同', sashite[x-1][:2])

if ('投了' in sashite):
    sashite.remove('投了')

print('\n'.join(sashite))

激指14」と「ShogiGUI」で保存したKIF形式ファイルで動作確認しています。

最後に

棋譜ファイルから抽出した指し手を一手一手PC上で再現していくとその時々の局面を取得できます。
次回はそれをやってみようと思います。

2021年6月28日追記

一括での局面取得を実現しました。
touch-sp.hatenablog.com