2011-06-28 19 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