2011-06-28 12 views
5

Jak uzyskać informacje o przenoszeniu danych z pliku pgn w języku Python? Jestem nowy w programowaniu i każda pomoc będzie doceniona.Wyodrębnianie informacji o ruchu z pliku pgn na komputerze Python

+0

Dotychczas można zwrócić łańcuch porusza się w tej postaci: „1.e4 C6 2.d3 D5 3.Nd2 E5 4.Ngf3 Nd7 5.d4 dxe4 6 .Nxe4 exd4 7.Qxd4 Ngf6 8.Bg5 Be7 ... itd. Co muszę teraz zrobić, to zwrócić ciąg znaków, który podsumowuje informacje w tekście ruchów w tej formie: "Biały przesuń pionka na e2 na e4. \ NBlack przesunął pionka na e7 na e5. " –

+0

Również w przypadku niektórych plików ciąg jest zwracany w tej postaci: '1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. d4 d6 7. Nd3 Nxe4 ... itd. Po numerze ruchu jest spacja. –

Odpowiedz

1

nie mogę dać żadnych wskazówek python-specyficzny, ale napisałem konwerter PGN niedawno w Javie, więc postaram oferować porady. Główną wadą łącza Miku jest to, że strona nie dopuszcza wariancji w plikach .pgn, które każda strona wydaje się różnić nieznacznie w dokładnym formacie.

  1. Niektóre .pgn mieć numer ruch dołączony do samego (1.e4 zamiast 1. e4) przenieść więc jeśli tokenise ciąg, można sprawdzić położenie kropki, ponieważ występuje tylko w ruchu liczby.

  2. wypracować wszystkie różne kombinacje ruch może masz. Jeśli ruch ma długość 5 znaków, może to być 0-0-0 (zamki queenside), Nge2 + (rycerz z g na e2 z szachownicą (+)/checkmate (#)), Rexb5 (Rook na e przyjmuje b5).

  3. Najdłuższy ciąg posunięcie może być to 7 znaków (w przypadku, gdy trzeba określić rangę pochodzenia i plik i przechwytywania iz czekiem). Najkrótsza jest 2 znaki (zaliczka pionka).

  4. Planuj wcześnie na castling i ruchy en passant. Możesz spóźnić się, że sposób, w jaki zbudowałeś swój program, nie przystosowuje się do nich.

  5. Dane podane na początku (ELO ocen, lokalizacja itp) różnią się od pliku do pliku.

2

nie mam PGN parser dla Pythona, ale można uzyskać kod źródłowy PGN parsera dla XCode od this place może to być pomocne

2

Spróbuj pgnparser.

Przykład Kod:

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 
Powiązane problemy