繁体   English   中英

如何从 PGN/SAN 获取开放名称?

[英]How to get an opening name from a PGN/SAN?

我有一个国际象棋动作列表,例如“e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 g6”(我可以从 SAN 转换为 PGN 或 UCI,所以不用担心)。 从这些动作中,我想得到开场的名字,在这个例子中是“西西里防御:龙变”。 此功能与您在https: //lichess.org/analysis#explorer、https://www.chess.com/analysisZ5E056C500A1C4B6A7B7110等网站中找到的功能基本相同。打开.php

我目前实施的方法包括通过https://explorer.lichess.ovh/masters向 Lichess Masters 数据库发出很多请求(请参阅https://lichess.org/api#operation/openingExplorerMaster )。 但是,问题是我必须发出大量请求,这使得这种方法不可行。

我正在使用 Python,所以我绝对希望解决方案在 Python 中。

方法一

使用pgn 提取

  • 下载eco.pgn
  • 下载 pgn 提取

示例命令行:

pgn-extract.exe -e -omyoutput.pgn mygames.pgn

eco.pgn 应该与 pgn-extract.exe 和您的输入 mygames.pgn 位于同一文件夹中。

方法二

使用pgnhelper这是一个 python package 我写的将生态(和其他)添加到 pgn 文件中的游戏。

示例命令行:

pgnhelper addeco --inpgnfn manila1974.pgn --outpgnfn out_manila1974.pgn --inecopgnfn eco.pgn

pgnhelper 是独一无二的,它保存了两个 ECO、两个开头名称和 2 个变体名称(如果可用)。

例子:

[ECO "A15"]
[ECOT "D90"]
[Opening "English"]
[OpeningT "Gruenfeld"]
[VariationT "Three knights variation"]

T表示转置。 在前 2 步或 4 层中,它记录[Opening "English"] ,在接下来的 12 步中,它将记录[OpeningT "Gruenfeld"] 我知道的大多数软件只是通过转置记录开头名称,因此 pgnhelper 中的[OpeningT "Gruenfeld"]仅在其他软件 output 中[Opening "Gruenfeld"]

此外,我创建了一个生态 github 存储库并进行了一些修改,例如将 QGD 开始标签值更改为 Queen's Gambit Declined 为用户清楚起见,使用基于最早记录游戏的第一个移动玩家的名称提供缺失的变体名称,以及其他. 为 pgnhelper 提供的 github 存储库中的 eco.pgn 来自此存储库。

github 中的 pgnhelper 源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM