Result result;
int opening_num, white_elo, black_elo;
time_t timestamp;
+ int file_num;
long start_position;
bool operator< (const Element& other) const {
break;
}
- int opening_num, white_elo, black_elo;
+ int opening_num, white_elo, black_elo, file_num;
time_t timestamp;
long start_position;
if (fread(&white_elo, sizeof(white_elo), 1, fp) != 1) {
//exit(1);
break;
}
+ if (fread(&file_num, sizeof(file_num), 1, fp) != 1) {
+ perror("fread()");
+ //exit(1);
+ break;
+ }
if (fread(&start_position, sizeof(start_position), 1, fp) != 1) {
perror("fread()");
//exit(1);
}
int bucket = hash_key_to_bucket(bpfen.data(), bpfen.size(), num_buckets);
- elems[bucket].emplace_back(Element {std::move(bpfen), std::move(move), Result(r), opening_num, white_elo, black_elo, timestamp, start_position});
+ elems[bucket].emplace_back(Element {std::move(bpfen), std::move(move), Result(r), opening_num, white_elo, black_elo, timestamp, file_num, start_position});
++num_elems;
}
fclose(fp);
c.set_first_timestamp(e.timestamp);
}
c.set_opening_num(e.opening_num);
+ c.set_pgn_file_num(e.file_num);
c.set_pgn_start_position(e.start_position);
}
if (!moves.count(e.move)) {
while (mtbl_iter_next(it, &key, &len_key, &val, &len_val)) {
Count c;
c.ParseFromArray(val, len_val);
- printf("%d %d %d %u %f %f %d %ld %ld",
+ printf("%d %d %d %u %f %f %d %ld %d %ld",
c.white(), c.draw(), c.black(), c.opening_num(),
double(c.sum_white_elo()) / c.num_elo(),
double(c.sum_black_elo()) / c.num_elo(),
c.num_elo(), c.first_timestamp(),
+ c.pgn_file_num(),
c.pgn_start_position());
for (int j = 0; j < c.move_size(); ++j) {
printf(" %s", c.move(j).c_str());
if (c0.has_first_timestamp()) {
c.set_first_timestamp(c0.first_timestamp());
}
+ c.set_pgn_file_num(c0.pgn_file_num());
c.set_pgn_start_position(c0.pgn_start_position());
} else {
c.set_opening_num(c1.opening_num());
if (c1.has_first_timestamp()) {
c.set_first_timestamp(c1.first_timestamp());
}
+ c.set_pgn_file_num(c1.pgn_file_num());
c.set_pgn_start_position(c1.pgn_start_position());
}
export SHARDS=40
export PARALLEL_LOADS=20 # Reduce if you have problems with OOM
-rm -f part-*.bin part-*.mtbl part-*.mtbl.part???? open.mtbl.new open.mtbl.part???? open.mtbl.part????.new 2>/dev/null
+rm -f pgnnames.txt part-*.bin part-*.mtbl part-*.mtbl.part???? open.mtbl.new open.mtbl.part???? open.mtbl.part????.new 2>/dev/null
+PGNNUM=0
for FILE in "$@"; do
date | tr -d "\n"
echo " $FILE"
- ./parallel-parse-pgn.sh "$FILE"
+ ./parallel-parse-pgn.sh "$FILE" "$PGNNUM"
+ echo "$FILE" >> pgnnames.txt
+ PGNNUM=$(( PGNNUM + 1 ))
done
date
// First timestamp this position/move was seen, and the byte offset
// into the PGN file for that game.
optional int64 first_timestamp = 8 [default=32503680000];
+ optional int32 pgn_file_num = 9;
optional int64 pgn_start_position = 10;
// Moves seen from this position.
- repeated string move = 9;
+ repeated string move = 11;
};
print $line;
chomp $line;
-my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_start_position, @moves) = split / /, $line;
+my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_file_number, $pgn_start_position, @moves) = split / /, $line;
# Explore one move out.
for my $move (@moves) {
#! /bin/sh
FILE=$1
+PGNNUM=$2
for X in $( seq 0 39 ); do
(
START=$( ./find-pgn-split-point.sh "$FILE" $X 40 )
END=$( ./find-pgn-split-point.sh "$FILE" $(( X + 1 )) 40 )
- ~/nmu/pgn-extract/pgn-extract --startpos $START --endpos $END -e -Wsessebin "$FILE" >> part-$X.bin 2>/dev/null
+ ~/nmu/pgn-extract/pgn-extract --startpos $START --endpos $END --startfilenum $PGNNUM -e -Wsessebin "$FILE" >> part-$X.bin 2>/dev/null
) &
done
wait
print $chld_in $hex, "\n";
chomp (my $line = <$chld_out>);
-my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_start_position, @moves) = split / /, $line;
+my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_file_number, $pgn_start_position, @moves) = split / /, $line;
my $opening = $openings{$opening_num} // 'A00: Start position';
# Explore one move out.