将棋棋譜の表記方法の差異と変換プログラム

棋譜の表記方法は「棋譜の表記方法:日本将棋連盟」が定めている方式があり、日本国内での表記は一部を除き本方法が使われています。

ただし、日本式は将棋のルールを知っている人が読み取ることを前提にした上で、記載を簡潔にするようにしているため、曖昧回避方式が複雑怪奇です(特に知らない人には)。コンピュータで棋譜を処理する場合には、この複雑さが問題になります。そのため、表示のための棋譜には簡略化した記法を使っているサイトも多いです。

海外では日本式の記法は普及しておらず、チェスを元にした記法が使われています。これにもいろいろ差異があります。

ここでは、私が変換ツールを作成したことがある形式を紹介します。また、変換の際に私が困った点も記しておきます。




Wikipedia:棋譜 から、曖昧回避が複雑である例を引用する。

  • 持ち駒の銀将を7三に打ったときは「▲7三銀打」となるが、7二に打ったときは単に「▲7二銀」
  • 4二のと金が5一に移動した場合、「▲5一と右上」となる(「右」だけでは4一のと金と区別が付かず、「上」だけでは5二のと金と区別が付かない)
  • 竜と馬も「寄」「引」「上」で移動を、「右」「左」で位置を示すが、「直」は用いない(最大2枚しか盤上にないため)
  • 1三の竜が2四に動いたときは「▲2四竜右」、2二の竜が動いたときは「▲2四竜左」となる(▲2四竜引ではどちらの竜が動いたが判別できない
  • 8四の銀将を9三に動かし、成らなかったときは「▲9三銀右上不成」となる



変換の際に共通する問題点

日本式の棋譜は、1手1手ごとの盤面と、そこで指せる合法手が元になっている。そのため、棋譜の変換の際は将棋の駒移動のルールをプログラムに全て記述する必要がある。また、“同”があるため直前の駒の移動先も覚えておく必要がある。

プログラムの中には合法手の範囲が異なるものがある。自玉が王手になるような自殺手を含めていいか、など。このような棋譜からの変換の際には、双方の範囲を処理できるプログラムを書く必要がある。

元々の対局がコンピュータを介していない場合、反則等による負けが発生するが、それが棋譜情報に明示されていない場合がある。

自由に使える汎用将棋処理ライブラリがあるといいのだが、上記理由から実装は面倒くさそう。


brainking.comの棋譜

wikipedia:棋譜に書かれている「チェスの代数式」にほぼ同じ。曖昧さの回避方式も代数式と同じく、識別可能な範囲で位置を表記する方式。

成は +、不成は =(で示される場合がある)、取は x、打は *。打つ場合は * を必ず付加する。

駒落ち下手は初手がパス手 – になっている。

変換時の問題点:

日本式では他の駒との相対関係により左右が決まるが、brainking では元位置のヒントしか書かれない。変換の際は盤面・合法手情報とヒントから移動元の駒を推測し、その上で日本式の表記生成が必要となる。

また、日本式では成れるのに成らない場合は不成表記が必要だが、brainkingではこれが省略されていることがある。そのため、成れる場合に + が書かれていなければ不成を書く必要がある。

棋譜として独立しておらず、HTMLをパースする必要がある。対局に付随する情報もHTMLから得る。


playok.comの棋譜

wikipedia:棋譜のチェスの代数式を基本とするが、移動元を省略しない。成(+)/不成(=)は日本式に同じ。

変換時の問題点:

移動元の情報が明示されているため、変換は比較的簡単。

ただ、playok.comの棋譜を多数変換したわけではないので、思わぬ問題があるかもしれない。発見次第追記します。


NHK杯将棋棋譜

盤面そのもの(と持ち駒)を指し手の数だけ保持する。表示プログラムは極めて簡単になるが、棋譜を起こすのは大変。

変換時の問題点:

前の手番の盤面との差を取ることで移動元・移動先情報は得られる。そのために81枡+駒台を全て比較する必要があるが。

駒の移動に伴う成・不成などは、移動先の盤面で駒が成っているかどうかから判断する。


某方式1

ある海外サイトで使われている方式。

持ち駒を打つ場合を除いて駒の種別情報を一切書かない方式。打つ場合は p*6e 等と移動元を*で表記する。成駒は移動先の英字を大文字表記する。9三銀成は 9c9B。

変換時の問題点:

駒情報がまったくないため、現在の盤面から移動駒を推測する必要がある。不成についても、成れる指し手&移動先が大文字で無い事から判断する。


某方式2

国内のあるサイトで使われている方式。

コンピュータ将棋対戦で用いられる CSA標準棋譜ファイル形式を用いている。

CSA形式は 移動元・移動先・移動先での駒種 を並べたものであり、成・不成などは移動元の駒種(盤面から判断)・移動先の駒種を見て付加する必要がある。

変換時の問題点:

CSA形式なのだが、対局者名や対局情報(どちらが勝ったか等)が棋譜上に記録されていない。他のページにある情報と合わせて棋譜生成する必要がある。

なお、反則負け情報がどこにもないので、正しい変換ができない棋譜が存在する。個別に修正する必要がある。


天下一将棋会2

XML形式。駒種別は数字(1~18)、移動元座標・移動先座標は数値2桁(11-99)、成はN。

変換時の問題点:

XML形式であるためパースは用意。CSA形式同様、成・不成は盤面を見て判断。
200手引き分けというルールがあるため、持将棋+コメントに変換したがそれでいいのだろうか。


リンク: