0

我正在尝试从https://database.lichess.org/读取国际象棋游戏文件,其中文件存储为 pgn 的 bzip。pgn 文件的示例格式如下所示:

[Event "4th Bayern-chI Bank Hofmann"]
[Site "?"]
[Date "2000.10.29"]
[Round "?"]
[White "Carlsen, Magnus"]
[Black "Cordts, Ingo"]
[ECO "A56"]
[WhiteElo "0"]
[BlackElo "2222"]
[Result "0-1"]

1. d4 Nf6 2. c4 c5 3. Nf3 cxd4 4. Nxd4 e5 5. Nb5 d5 6. cxd5 Bc5 7. N5c3 O-O 8. e3 e4 9. h3 Re8 10. g4 Re5 11. Bc4 Nbd7 12. Qb3 Ne8 13. Nd2 Nd6 14. Be2 Qh4 15. Nc4 Nxc4 16. Qxc4 b5 17. Qxb5 Rb8 18. Qa4 Nf6 19. Qc6 Nd7 20. d6 Re6 21. Nxe4 Bb7 22. Qxd7 Bxe4 23. Rh2 Bxd6 24. Bc4 Rd8 25. Qxa7 Bxh2 26. Bxe6 fxe6 27. Qa6 Bf3 28. Bd2 Qxh3 29. Qxe6+ Kh8 30. Qe7 Bc7 

我可以read.csv直接从 bz2 文件中读取文件:

read.csv(file.pgn.bg2, nrows = 100000, stringsAsFactors = F, header = F)

但问题是 read.csv 非常慢并且文件有数百万行。所以我想我会使用fread它,因为它现在可以读取 .bz2 文件。问题是当我尝试以下

fread(file.pgn.bg2, nrows = 1000)

该命令只运行了很长时间而没有任何结果。我的会话信息():

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

我尝试使用普通的 .pgn 文件,fread但读取不正确。因为它拆分了列并丢弃了游戏符号,所以对于上面的示例,它会导致如下所示:

V1               V2
[Event     "4th Bayern-chI Bank Hofmann"]
[Site      "?"]
[Date      "2000.10.29"]
[Round     "?"]
[White     "Carlsen, Magnus"]
[Black     "Cordts, Ingo"]
[ECO       "A56"]
[WhiteElo  "0"]
[BlackElo  "2222"]
[Result    "0-1"]

但至少它正在阅读它。有人会对如何去做有任何建议吗?如何使用fread正确读取 .pgn.bz2 文件?

4

1 回答 1

1

这是正确读取文件....

之后如何处理是一个不同的问题;-)

DT <- fread( "./temp/lichess_db_standard_rated_2013-01.pgn.bz2", sep = "", header = FALSE )

在此处输入图像描述

于 2020-06-02T08:00:30.573 回答