Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Kurzanleitung pgn-extract
- - By Stefan Pohl Date 2024-06-29 10:45 Upvotes 2
Da sich ja scheinbar doch einige schwer tun, pgn-extract richtig zu nutzen, habe ich mal eine Kurzanleitung verbrochen, mit den wichtigsten 6 Funktionen von pgn-extract aus meinem Computerschachalltag. Auf Englisch, weil ich das auch auf meiner Website zum Download anbieten werde.
Mit diesen 6 Funktionen manage ich sowohl alle meine Datenbanken für meine Ranglisten (ChessBase und ähnliches fasse ich seit Jahren nicht mehr an), als auch die meisten Dinge, die zum Erstellen von Eröffnungssets nötig sind.

Das sollte weiterhelfen. Aber das ganze Manual von pgn-extract zu lesen, ist dennoch sehr empfehlenswert. pgn-extract kann noch so unfaßbar viel mehr!



Here the 6 most important pgn-extract commands from my work in computerchess, because pgn-extract is a
very powerful tool, but the number of possibilities makes it a little bit complicated to use.
So here, the most important things, you can do with pgn-extract:

Delete games with complete identical notation:
pgn-extract --quiet -D source.pgn --output unique.pgn
-------------------------------------------------------------------------------------------------------
Delete only openings/games with identical endpositions:
pgn-extract --quiet --fuzzydepth 0 -D source.pgn --output unique.pgn
-------------------------------------------------------------------------------------------------------
Delete Chess960 and other games starting from FEN-code (not from chess starting position):
pgn-extract --quiet --nosetuptags source.pgn --output nofen.pgn
-------------------------------------------------------------------------------------------------------
Cut all games after a fix number of plies (for making opening-sets out of games for example):
pgn-extract --quiet --plylimit 16 source.pgn --output cut8mvs.pgn
(16 is the number of plies, after the cutoff is done)
-------------------------------------------------------------------------------------------------------
Add played games to a file:
pgn-extract --quiet -W -abase.pgn newgames.pgn
(add the games in newgames.pgn to base.pgn. File base.pgn must already exist, but may be empty)
-------------------------------------------------------------------------------------------------------
Delete played games of one engine in a file (mention, this is quite slow, compared to other
pgn-extract operations, dont worry):
pgn-extract --quiet -W -tdelete_engine -nnewbase.pgn -otrash.pgn source.pgn
This command needs a separate textfile "delete_engine" (no extensions like .txt or so!!!), and in there:
Player "Enginename"
(important: no empty lines and no space behind the Player "Enginename", otherwise this fails!)
This deletes the games played by Enginename out of the source.pgn and writes the remaining
games in newbase.pgn. In trash.pgn, the deleted games are stored - if you want to keep them
in other files...
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
(Add -C -N -V to any of these pgn-extract lines, to delete all comments in the output file games)
Parent - By Stefan Pohl Date 2024-06-29 11:00 Upvotes 2
Man kann sich dann natürlich auch .bat files schreiben, in denen man einige dieser Operationen nacheinander automatisiert ausführt. Und man kann auch gleich noch ORDO dort starten, wenn man will.

Ich habe z.B. unter anderem so eine Datei, mit der ich einen neuen Testrun in die Hauptdatenbank meiner UHO-Top15 Rangliste reinschreibe. Sowie ins Archiv. Und dann starte ich gleich ORDO. Alles mit einem Doppelklick... Bis ich Chessbase nur geöffnet habe, bin ich hier schon längst fertig... Ergo: Wer pgn-extract nicht nutzt, macht es sich viel schwerer als nötig und man braucht viel länger für alles.

pgn-extract --quiet -W -aUHO_Ratinglist_games.pgn games.pgn > NUL
pgn-extract --quiet -W -aUHO_Ratinglist_archive004.pgn games.pgn > NUL
ordo-win64 -n 2 -N "0,0" -a 3833 -A "Stockfish 16.1 240224" -p UHO_Ratinglist_games.pgn -s500 -V -E
pause
Parent - - By Kurt Utzinger Date 2024-06-30 13:01
Stefan Pohl schrieb:

Da sich ja scheinbar doch einige schwer tun, pgn-extract richtig zu nutzen, habe ich mal eine Kurzanleitung verbrochen, mit den wichtigsten 6 Funktionen von pgn-extract aus meinem Computerschachalltag. Auf Englisch, weil ich das auch auf meiner Website zum Download anbieten werde.
Mit diesen 6 Funktionen manage ich sowohl alle meine Datenbanken für meine Ranglisten (ChessBase und ähnliches fasse ich seit Jahren nicht mehr an), als auch die meisten Dinge, die zum Erstellen von Eröffnungssets nötig sind.

Das sollte weiterhelfen. Aber das ganze Manual von pgn-extract zu lesen, ist dennoch sehr empfehlenswert. pgn-extract kann noch so unfaßbar viel mehr!

Here the 6 most important pgn-extract commands from my work in computerchess, because pgn-extract is a
very powerful tool, but the number of possibilities makes it a little bit complicated to use.
So here, the most important things, you can do with pgn-extract:

Delete games with complete identical notation:
pgn-extract --quiet -D source.pgn --output unique.pgn
-------------------------------------------------------------------------------------------------------
Delete only openings/games with identical endpositions:
pgn-extract --quiet --fuzzydepth 0 -D source.pgn --output unique.pgn
-------------------------------------------------------------------------------------------------------
Delete Chess960 and other games starting from FEN-code (not from chess starting position):
pgn-extract --quiet --nosetuptags source.pgn --output nofen.pgn
-------------------------------------------------------------------------------------------------------
Cut all games after a fix number of plies (for making opening-sets out of games for example):
pgn-extract --quiet --plylimit 16 source.pgn --output cut8mvs.pgn
(16 is the number of plies, after the cutoff is done)
-------------------------------------------------------------------------------------------------------
Add played games to a file:
pgn-extract --quiet -W -abase.pgn newgames.pgn
(add the games in newgames.pgn to base.pgn. File base.pgn must already exist, but may be empty)
-------------------------------------------------------------------------------------------------------
Delete played games of one engine in a file (mention, this is quite slow, compared to other
pgn-extract operations, dont worry):
pgn-extract --quiet -W -tdelete_engine -nnewbase.pgn -otrash.pgn source.pgn
This command needs a separate textfile "delete_engine" (no extensions like .txt or so!!!), and in there:
Player "Enginename"
(important: no empty lines and no space behind the Player "Enginename", otherwise this fails!)
This deletes the games played by Enginename out of the source.pgn and writes the remaining
games in newbase.pgn. In trash.pgn, the deleted games are stored - if you want to keep them
in other files...
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
(Add -C -N -V to any of these pgn-extract lines, to delete all comments in the output file games)


Hallo Stefan
Vielen Dank für diese hilfreichen Hinweise. Du bist ein wahrer Fachmann in solchen Dingen.
Ich muss mir PGN-Extract mal genauer anschauen, um zu sehen, ob ich das eine oder
andere für meine (viel) bescheideneren Zwecke nutzen kann. Ich spiele ja nie Tausende
von Partien, die ich auf verschiedene Arten auswerten/ändern/usw. will/muss. In den
meisten Fällen genügt mir ChessBase und nötigenfalls noch SCID.
Viele Grüsse
Kurt
Parent - - By Stefan Pohl Date 2024-06-30 16:13 Edited 2024-06-30 17:13
Naja, Kurt, ich denke für die normale Verwaltung deiner wenigen Partien (im Vergleich zu meinen 15000 Partien Testruns für nur einen Enginetest), brauchst du pgn-extract nicht. pgn-extract ist primär dafür gedacht, sehr große Datenbanken sehr schnell zu bearbeiten. Und sehr fortgeschrittene Operationen in pgn Datenbanken (automatisiert) durchzuführen, die sonst kein Tool bietet.

Allerdings könnte es sein, daß du vielleicht weiterführende Untersuchungen deiner Partien machen willst und dann kann ich pgn-extract nur empfehlen. Das Tool kann unfaßbar viel mehr als diese 6 extrem simplen Arbeitsvorgänge durchzuführen. Diese 6 Anwendungsbeispiele sind nicht mal die Spitze des Eisbergs. Eher die Spitze der Spitze...
Bis auf das Sortieren einer Datenbank, das geht mit pgn-extract nicht. Was ja nicht schlimm ist, weil das mit SCID sehr einfach geht.

Du musst dir klarmachen, meine ganzen Tools (EAS, SacrificegameSearch, Interesting Wins Search etc.) wickeln ca. 90% aller notwendigen Operationen durch pgn-extract Aufrufe ab. Der Rest meiner Tools sind dann eigentlich nur noch triviale Algorithmen (Prozente ausrechnen, Partien in einer pgn zählen, Statistiken formatieren und ausgeben - alles pillepalle). Die "Magie" in den Tools entsteht nur durch das geschickte Nutzen von pgn-extract auf immer neuen, temporären Arbeitsdatenbanken mit immer neuen Teiloperationen, bis daraus eine neue, höhere Gesamtfunktion entsteht (wie meine revolutionäre, ultraschnelle Opfersuche, die der Kern meiner ganzen Tools ist). Im EAS-Tool Programmcode kommen zum Beispiel knapp 60 (!) pgn-extract Aufrufe vor, obwohl der Code (mit Kommentaren!) nur ca. 1000 Zeilen und nicht mal 50 KiloByte groß ist (eben weil pgn-extract ja fast die ganze Arbeit macht). Und diese pgn-extract Aufrufe laufen ja in Programmschleifen immer wieder durch, sodaß es unter dem Strich oft Tausende von Aufrufen von pgn-extract ergibt, wenn man das EAS-Tool nur einmal laufen läßt.

Bis auf das Zählen der Partien in einer pgn (pgn-extract gibt immer nur pgn-Datenbanken als Output zurück. Niemals irgendeinen Zahlenwert oder sonst eine Statistik) und das Sortieren einer pgn, geht ansonsten gefühlt alles mit pgn-extract, was man sich in einer pgn Datenbank nur vorstellen kann.
Und wenn man meint, irgendetwas ginge mit pgn-extract nicht, hat man meistens nur die Lösung im pgn-extract manual nicht gefunden (oder sie nicht in Teillösungen so zerlegt, daß es mit einigen aufeinanderfolgenden pgn-extract Funktionen nicht doch geht) - das ist zumindest meine Erfahrung. Das sieht man ja schon an der Länge des manuals von pgn-extract, obwohl der Autor sich in diesem manual wirklich extrem kurz faßt und alle Funktionen nur im Telegrammstil erläutert. Es sind einfach so viele.... selbst ich habe bislang nicht mal die Hälfte aller Funktionen je genutzt.

https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/help.html

PS: Das Zählen von Partien in einer pgn-Datenbank in der Windows-Batch-Sprache, mit der man ja pgn-extract ansteuert (.bat Textdateien in Windows: Diese kann man einfach mit jedem Texteditor bearbeiten - da es eine Interpretersprache ist, kann man dann das Programm sofort wieder starten. Man braucht keine Entwicklungsumgebung oder einen Compiler zu installieren - sehr angenehm), geht übrigens sehr einfach mit meiner simplen (aber recht kryptischen) Subroutine namens countgames (diese schreibt die Zahl der gefundenen Partien in die (globale!) Variable c_numb_pgn, die dann überall im Programmcode benutzt werden kann). Auch hier mit einem Trick: Ich zähle einfach, wie oft der pgn-TAG "White" inklusive vorgesetzter [ vorkommt. Da dieser Textstring sehr ungewöhnlich ist ("[White ") kommt er sonst in den Partien einer pgn nicht vor, selbst dann nicht, wenn diese Kommentare enthält. Und er muß aber in jeder Partie vorhanden sein, ansonsten ist es keine reguläre pgn-Datenbank (viele andere pgn-Tags (z.B. Annotator oder so) sind ja optional, aber die Spielernamen nicht)

:countgames
set /A c_numb_pgn=0
for /f "tokens=2,* delims= " %%G in ('find /C "[White " %~1') do set /A c_numb_pgn=%%H
exit /B 0

PS: Aufgerufen wird diese Subroutine dann einfach mit
CALL :countgames partien.pgn
das zählt dann die Partien in partien.pgn

Wer selbst in die faszinierende Welt von pgn-extract eintauchen will, muß natürlich mit der Windows Batch Sprache halbwegs klarkommen. Dazu empfehle ich zumindest grundlegende Programmierkenntnisse in einer einfachen Sprache wie BASIC oder PASCAL oder C und diese Übersichtsseite, in der ich dann einfach immer wieder mal nachschlage (sie ist sogar auf Deutsch!):
https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-kommandos

Als Anfänger würde ich zunächst einfach mal den Programmcode eines meiner Tools mit einem Texteditor öffnen, reinschauen und versuchen, die einzelnen Batch-Befehle darin dann peu a peu (mit Hilfe der Seite von Axel Hahn (s.o.)) nachzuvollziehen. Dann wird schnell klar, wie die Grundfunktionen (Schleifen, If-then-else Verzweigungen und Subroutinen-Aufrufe etc.) funktionieren. Alle wesentlichen Arbeitsschritte habe ich außerdem auch mit Kommentaren versehen, dadurch weiß man, was an der Stelle überhaupt gemacht wird...
Ich warne aber vor: Die Batch-Sprache kennt keine Zahlen mit Nachkommastellen. Nur ganze Zahlen (long Integer), da sie fürs Rechnen nicht gedacht ist. Das machte übrigens meine Prozent-Rechenroutine zum echten Albtraum.
Parent - By Stefan Pohl Date 2024-06-30 17:21 Edited 2024-06-30 17:26
Vergessen:

Zusätzlich kann man (das habe auch ich in meinen Tools an einigen wenigen Stellen getan) pgn-Tools von Norm Pollock herunterladen und auch welche von diesen Tools in seinem Batch-Programmcode (wie auch pgn-extract) verwenden:
http://40hchess.epizy.com/?i=1

Damit hat man dann noch mehr Möglichkeiten. Toll ist z.B. das Tool namelist, welches alle Namen aller Spieler (Engines), die in einem pgn-File vorkommen, in eine neue, separateTextdatei schreibt. Das nutze ich in meinem EAS-Tool z.B., um in einer Schleife jeweils den nächsten Enginenamen dort auszulesen und diesen Namen dann zum Filtern der Partien (natürlich mit pgn-extract...), an denen diese Engine beteiligt war, zu nutzen.
Up Topic Hauptforen / CSS-Forum / Kurzanleitung pgn-extract

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill