Ilia Denisov e17e945b41
build / dawg (pull_request) Successful in 1m33s
Drop substantivized-adjective false nouns via manual_reject.txt
OpenCorpora/libmorph hand a noun reading to Stage 2 above the РАН note, so
substantivized-adjective false nouns a dictionary misreads (нёбный, акцизный,
велярный, …) reached scrabble.txt with no veto path — the earlier abbreviation
filter only carved out Abbr+Fixd.

ru_stage2.py now subtracts sources/scrabble_ru/manual_reject.txt last, after
every admission path (OC seed / libmorph / note / manual_confirm / variant),
mirroring manual_confirm.txt. The list seeds 62 hand-reviewed words — 43 pure
adjectives plus 19 marginal (slang/archaic/jargon) substantivizations; genuine
substantivized nouns (больной, знакомый, учёный, участковый, …) stay.

scrabble.txt -62 (83206->83144); erudit.txt re-folded -62. The DAWGs are
gitignored and rebuild from these lists in CI.
2026-06-20 17:09:02 +02:00

scrabble-dictionary

Versioned dictionary artifacts for the Scrabble game backend: the word-list sources and the build pipeline that produces the dictionary DAWGs, published as a release artifact (the DAWGs are data, not a Go module).

The build uses the published scrabble-solver dictdawg/wordlist packages (pinned in go.mod) over github.com/iliadenisov/{dafsa,alphabet} (v1.1.0), so the on-disk format and letter indexing match the running backend exactly — there is no index drift, because the backend pins the same dafsa/alphabet. The DAWGs this repo builds are byte-identical to the solver's committed test fixtures.

Artifact

make dawg builds three DAWGs into dawg/:

file variant source
en_sowpods.dawg English (SOWPODS) sources/scrabble_en/sowpods.txt
ru_scrabble.dawg Russian Scrabble sources/scrabble_ru/scrabble.txt
ru_erudit.dawg Эрудит sources/erudit_ru/erudit.txt (Ё→Е folded scrabble.txt, via tools/fold_yo.py)

The CI (.gitea/workflows/build.yaml) rebuilds them on every push/PR as a validation gate (inlined go run, no make/python needed on the runner). Release artifacts are published per version (see Release below): the three DAWGs packaged flat into scrabble-dawg-<tag>.tar.gz and attached to the Gitea release for the vX.Y.Z tag. The backend deploy unpacks that tarball into BACKEND_DICT_DIR; one semver label versions the whole set (additive — a new version is a new release, never breaking a running backend).

Sources / provenance

  • English: sources/scrabble_en/sowpods.txt, vendored from kamilmielnik/scrabble-dictionaries.
  • Russian: sources/scrabble_ru/scrabble.txt, derived from the Russian academic orthographic dictionary by the tooling under tools/ (see tools/README.md); sources/erudit_ru/erudit.txt is its Ё→Е folded form (tools/fold_yo.py). Only the prepared word lists are vendored; the heavy upstream source (the orfo PDF/text) is not.

Build

make dawg     # -> dawg/{en_sowpods,ru_scrabble,ru_erudit}.dawg

Requires Go (module deps fetched with GOPRIVATE=gitea.iliadenisov.ru/*, exported by the Makefile). No python is needed for the build — the Ё→Е fold is committed as erudit.txt; regenerate it with python3 tools/fold_yo.py sources/scrabble_ru/scrabble.txt > sources/erudit_ru/erudit.txt.

Release

CI builds and validates the DAWGs but does not upload them (the release upload needs a write token, kept out of CI for now — a future enhancement). To publish a version, tag it and attach the artifact to its Gitea release:

make dawg
tar czf scrabble-dawg-vX.Y.Z.tar.gz -C dawg en_sowpods.dawg ru_scrabble.dawg ru_erudit.dawg
# create the Gitea release for tag vX.Y.Z and upload scrabble-dawg-vX.Y.Z.tar.gz as an asset

The backend consumes it at https://gitea.iliadenisov.ru/developer/scrabble-dictionary/releases/download/vX.Y.Z/scrabble-dawg-vX.Y.Z.tar.gz.

S
Description
No description provided
Readme 26 MiB
v1.3.1 Latest
2026-06-30 05:10:45 +00:00
Languages
Python 55.8%
Go 36.5%
C++ 4.5%
Makefile 3.2%