json-kifu-format icon indicating copy to clipboard operation
json-kifu-format copied to clipboard

読み込めない棋譜スレ

Open na2hiro opened this issue 7 years ago • 9 comments

parseに失敗する棋譜をこのスレに張っていくことにします.

na2hiro avatar May 07 '17 12:05 na2hiro

20170223_2.kif.txt: https://github.com/na2hiro/Kifu-for-JS/issues/31 により報告

na2hiro avatar May 07 '17 12:05 na2hiro

はじめまして。突然失礼致します。主にperlと釣りの個人ブログを運営しているwebkoza.com の denden と申します。 JKFの仕様に付いて確認があり、場違いの可能性を顧みずコメントさせてください。

友人同士で手軽にスマフォのブラウザ上でネット対局ができるサービスを作りました。もちろんブラウザサイドはjavascriptです。開発の最後に棋譜の保存/展開機能を実装することを思い付き、調べた所na2hiroさんのJKFにたどり着きました。この素晴らしい仕様が広まれば良いと思っています。 上記機能を作り込む過程で正しい仕様の定義について下記2つの疑問が生じましたので念のため確認させてください。

READMEに「promote? Bool 成るかどうか true:成, false:不成, 無いnull**:どちらでもない**」 とありますが、「Kif for JS example」を使用した時、棋譜のmoves ARRAYに下記の(1)が存在すると「棋譜エラー」となります。「null」を最初「空文字」と勝手に思ってやってみたのですが、「空文字」は「false」になるので「不成」となるということでしょうか。また、下記の(2)が存在すると「不成」と表示されます。 parse結果として「どちらでもない=成れない手」を期待する場合、promote オブジェクト自体が存在しなければ期待通りになります。READMEの「無い」がこれに該当するのでしょうか。

(1)ーー棋譜エラー { "move": { "to": { "x": 8, "y": 4 }, "from": { "x": 8, "y": 3 }, "color": 1, "piece": "FU", "promote": } (2)ーー不成? { "move": { "to": { "x": 8, "y": 4 }, "from": { "x": 8, "y": 3 }, "color": 1, "piece": "FU", "promote":"" }

denden1025 avatar Apr 18 '18 13:04 denden1025

初めまして,JKFに興味を持っていただいてありがとうございます.

無いかnull,というのは次のようなJSONのことを意図しています.

プロパティがない
{
  "move": { "to": { "x": 8, "y": 4 }, "from": { "x": 8, "y": 3 },
  "color": 1,
  "piece": "FU"
}
値がnull
{
  "move": { "to": { "x": 8, "y": 4 }, "from": { "x": 8, "y": 3 },
  "color": 1,
  "piece": "FU",
  "promote": null
}

"promote":""はJKFとしては不正な値ですが,JavaScript上で空文字列はfalsyなのでJKFPlayerの実装でfalseと捉えてしまったかもしれません(本当は不正な値として弾くべき).

また,true, false, 無いまたはnullの3種類の使い分けが明確に書いてありませんが,これは将棋連盟の正式な棋譜表記における"成" "不成" "(何も書かない)"にそれぞれ対応しています.具体的には次のように説明できます.

  • その駒の動きで成るか成らないか,指し手が選択できる場合: truefalse
  • その駒の動きで成りようがない場合(玉金や成駒が動いた.3段目以内でない.駒打ちなど): 無いまたはnull

この例の場合,"☖8四歩"と飛車先の歩を突く手でしたらプロパティがないまたは値がnullの例が正しいです.

na2hiro avatar Apr 18 '18 15:04 na2hiro

ところで,もし,正しいJKFを出力したいのでしたら,このリポジトリ内にあるJKFPlayerを利用すると良いです.json-kifu-format-1.2.0.min.jsをscriptタグで読み込んで使う場合,次のようにすることで正式なJKFが出力できます.

var player = new JSONKifuFormat.JKFPlayer({
  header: {
    "先手":"藤井聡太",
    /*対局者名などのメタ情報*/
  },
  moves:[{}]
});
player.inputMove({color: 0, from: {x: 7, y: 7}, to: {x: 7, y: 6}, piece: "FU"})
player.inputMove({color: 1, from: {x: 3, y: 3}, to: {x: 3, y: 4}, piece: "FU"})
...
player.inputMove({color: 0, to: {x: 5, y: 5}, piece: "KA"}) // 駒打ち
...
var JKFString = player.toJKF();

na2hiro avatar Apr 18 '18 15:04 na2hiro

明解なご返答ありがとうございます。不明確な点がクリアーになりました。恥ずかしながらjavascriptのオブジェクトで「"promote": null」という表記ができる事を知りませんでした。

JSONKifuFormat 簡単で良さそうですね。既に作り込んでしまっていますが、ぜひ試してみます。

denden1025 avatar Apr 19 '18 10:04 denden1025

初めまして。読み込めない棋譜がありましたのでご報告します。
棋譜をgistにアップいたしました。
https://gist.github.com/mfujiwara/e055a889650ab0d5fc331659d2553e7a

上記の棋譜は毎日新聞が公開している棋譜からコメント部分のみ削除したものです。
二日制の将棋の場合、封じ手から開封までの間だけ封じ手という手が存在するようです。 http://mainichi.jp/feature/shougi/mai/meijinsen_20180508_M7_10034.kif

ご対応いただけますと幸甚です。 どうぞよろしくお願いいたします。

mfujiwara avatar May 08 '18 12:05 mfujiwara

読めない棋譜がありましたので報告します。

  • https://golan.sakura.ne.jp/denryusen/dr1_test2/kifufiles/dr1test1test0+tu-1_aobazero_viper-300-5F+aobazero+viper+20200719201040.csa
  • https://golan.sakura.ne.jp/denryusen/dr1_test2/kifufiles/dr1test1test0+tu-6_daigorilla_aobazero-300-5F+daigorilla+aobazero+20200719231715.csa
  • https://golan.sakura.ne.jp/denryusen/dr1_test2/kifufiles/dr1test1test0+tu-9_suisho_aobazero-300-5F+suisho+aobazero+20200720011011.csa
  • https://golan.sakura.ne.jp/denryusen/dr1_test2/kifufiles/dr1test1test0+tu-11_aobazero_wandre-300-5F+aobazero+wandre+20200720023229.csa
  • https://golan.sakura.ne.jp/denryusen/dr1_test2/kifufiles/dr1test1test0+tu-13_aobazero_hefeweizen-300-5F+aobazero+hefeweizen+20200720034211.csa

勝ち宣言周りの書式(1行に勝ち宣言と棋譜コメントを並べる %KACHI,'* -5000 win のような表記)の問題かもしれません。逆に、以下の棋譜は現状問題ないようです。

  • https://golan.sakura.ne.jp/denryusen/dr1_test2/kifufiles/dr1test1test0+tu-2_sylwi_suisho-300-5F+sylwi+suisho+20200719210027.csa

(追記) Kifu-for-JS (json-kifu-format) へ棋譜を読み込ませる際、

%KACHI,'* -5000 win
T4

の部分を

%KACHI
T4
'* -5000 win

のように加工することで、正常に読み込むことが出来そうです。

mizar avatar Jul 19 '20 12:07 mizar

@mfujiwara とても遅くなって申し訳ありませんが、今回のリリースで封じ手に対応しました。ご報告ありがとうございました。

@mizar 詳しい情報ありがとうございます。指し手と時間の間にコメントが来る例に対応していませんでしたので対応しました。

Kifu for JS 2.1.3 https://github.com/na2hiro/Kifu-for-JS/releases/tag/v2.1.3 及びjson-kifu-format 1.2.3にて修正されましたコードが利用可能です。

na2hiro avatar Jul 21 '20 15:07 na2hiro

  • https://gist.github.com/endo4917/521664791051af57674c43f529436ffe
    • 時間の前後のスペースを許す
  • http://park6.wakwak.com/~k-oohasi/shougi/kifu/zukou/zukou080.kif
    • 先手の持駒:なしの行が省略されている。要調査

na2hiro avatar Nov 09 '20 17:11 na2hiro