2011-06-28 18 views
5

如何从Python中的pgn文件中提取移动信息?我是新手编程和任何帮助,将不胜感激。从Python上的pgn文件中提取移动信息

+0

到目前为止我可以以这种形式返回移动的字符串: “1.e4 C6 2.d3 D5 E5 3.Nd2 ND7 4.Ngf3 5.d4 dxe4 6 .Nxe4 exd4 7.Qxd4 Ngf6 8.Bg5 Be7 ... etc 我现在需要做的是返回一个字符串,以这种形式总结movetext中的信息:“白色将e2上的棋子移动到e4。\ n黑色把e7的棋子移到e5。“ –

+0

另外,对于某些文件,字符串以这种形式返回: '1。 e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. d4 d6 7. Nd3 Nxe4 ...等移动后有一个空格。 –

回答

1

我不能给你任何Python特定的方向,但我最近用java写了一个PGN转换器,所以我会尝试提供一些建议。 Miku链接的主要缺点是网站不允许在.pgn文件中出现差异,每个网站在确切格式上似乎略有不同。

  1. 一些.pgn具有连接到移动本身(1.e4而不是1 E4)的手数,所以如果你tokenise字符串,你可以因为它只发生在移动检查点的位置数字。

  2. 计算出你可以拥有的所有不同的移动组合。如果移动长度为5个字符,它可以是0-0-0(皇后城堡),Nge2 +(骑士从g到e2与检查(+)/将军(#)),Rexb5(Rook on e需要b5)。

  3. 移动最长的字符串可能是7个字符(因为当您必须指定原始等级和文件以及带有检查的捕获AND时)。最短的是2个字符(棋子前进)。

  4. 提前计划castling和en passant动作。你可能已经太迟了,你建立程序的方式不容易适应它们。

  5. 在开始时给出的细节(ELO评级,位置等)因文件而异。

2

我没有为Python PGN解析器,但你可以得到PGN解析器的源代码,从this place的XCode它可以协助

2

尝试pgnparser

示例代码:

import pgn 
import sys 

f = open(sys.argv[1]) 
pgn_text = f.read() 
f.close() 
games = pgn.loads(pgn_text) 
for game in games: 
    print game.moves