2011-06-28 29 views
5

Tôi làm cách nào để trích xuất thông tin di chuyển từ tệp pgn trên Python? Tôi mới lập trình và mọi trợ giúp sẽ được đánh giá cao.Trích xuất thông tin di chuyển từ tệp pgn trên Python

+0

Cho đến nay tôi có thể trả về một chuỗi các chuyển động theo hình thức này: '1.e4 c6 2.d3 d5 3.Nd2 e5 4.Ngf3 Nd7 5.d4 dxe4 6 .Nxe4 exd4 7.Qxd4 Ngf6 8.Bg5 Be7 ... etc Những gì tôi cần làm bây giờ là trả về một chuỗi tóm tắt thông tin trong văn bản dưới dạng này: "Trắng di chuyển con tốt ở e2 đến e4. \ NĐen di chuyển cầm đồ từ e7 đến e5. " –

+0

Ngoài ra, đối với một số tệp, chuỗi đang được trả về theo mẫu này: '1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. d4 d6 7. Nd3 Nxe4 ... vv Có một dấu cách sau số di chuyển. –

Trả lời

1

Tôi không thể cung cấp cho bạn bất kỳ chỉ dẫn cụ thể nào về Python, nhưng tôi đã viết trình chuyển đổi PGN gần đây trong java, vì vậy tôi sẽ cố gắng cung cấp một số lời khuyên. Nhược điểm chính của liên kết của Miku là trang web không cho phép phương sai trong tệp .pgn, mà mỗi trang web dường như thay đổi đôi chút theo định dạng chính xác.

  1. Một số .pgn có số di chuyển đi kèm với bản thân di chuyển số.

  2. Làm việc ra tất cả các kết hợp di chuyển khác nhau mà bạn có thể có. Nếu di chuyển là 5 ký tự, nó có thể là 0-0-0 (queenside lâu đài), Nge2 + (Knight từ g đến e2 với check (+)/checkmate (#)), Rexb5 (Rook on e mất b5).

  3. Chuỗi dài nhất di chuyển có thể là 7 ký tự (khi bạn phải chỉ định thứ hạng gốc VÀ tệp VÀ chụp VÀ có kiểm tra). Ngắn nhất là 2 ký tự (tạm ứng cầm đồ).

  4. Lập kế hoạch sớm cho việc di chuyển và di chuyển. Bạn có thể nhận ra quá muộn rằng cách bạn đã xây dựng chương trình của bạn không dễ dàng thích ứng với chúng.

  5. Chi tiết được cung cấp khi bắt đầu (xếp hạng ELO, vị trí, v.v.) thay đổi từ tệp này sang tệp khác.

2

Tôi không có phân tích cú pháp PGN cho python nhưng Bạn có thể lấy mã nguồn của PGN phân tích cú pháp cho XCode từ this place nó có thể được hỗ trợ

2

Hãy thử pgnparser.

đang

Ví dụ:

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 
Các vấn đề liên quan