Commit graph

6 commits

Author SHA1 Message Date
6cd42b1e12 Sprint 5: dark mode CSS, alternate conjugation forms, README releases link fix
- add @media (prefers-color-scheme: dark) block to CARD_CSS covering all hardcoded colors
- _parse_table: add table_el param to parse a specific table directly
- _extract_conjugations: detect second active conjugation table; store alternate_forms
- build_conj_deck: show "primary / alternate" when alternate form exists for a key
- README: fix dead ../../releases link → git.nevo.engineer/nevo/pealim/releases

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 07:07:28 +00:00
372680be3c Add missing 70th verb להתקלח (to shower, Hitpa'el)
להתלקלח in the original source was a typo for להתקלח (1896-lehitkaleach),
not for להתקלקל as previously assumed — it's a completely different word.
Conjugation deck now has the correct 70 paradigm verbs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 06:46:07 +00:00
0db11b1aa1 Sprint 4: fix insertion order, skip infinitive cards, split past_3p, fix empty binyan
- vocab deck uses frequency insertion order (genanki.Package); conjugation deck random (_RandomOrderPackage)
- skip infinitive form_key in conjugation deck build (reference only, not a quiz target)
- PAST_3P_EXPANSION: split past_3p into separate הֵם and הֵן cards
- SECTION_BINYAN parsing: read section headers from verbs_input.txt as binyan hints
- add binyan_hint param to _extract_conjugations and _extract_passive_from_active_slug
- patch 20 cached entries with empty binyan (Pa'al, Nif'al) using section hints
- result: 2428 notes across 69 verbs, all with populated binyan

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 06:42:32 +00:00
d26e4c8ce5 feat: Sprint 3 — passive/active separation, random card order, card UX fixes
Conjugation extraction:
- Active entries now extract active forms only (no auto passive partner)
- Passive (# 3ms:) entries extract passive section only via new
  _extract_passive_from_active_slug(); search-based fallback also uses
  this path so no active forms leak into passive entries
- # slug: VERB SLUG override syntax for search-ambiguous active verbs
- # 3ms: FORM ACTIVE-SLUG syntax for passive entries with known active page
- Fixed verb spellings: בוטל (was בותל), slug overrides for תואם →
  2344-letaem, זוכה → 503-lezakot, לָשִׂים → 45-lasim, העבר → 1442-lehaavir

Card UX:
- Passive card front: shows active partner infinitive (e.g. לְבַטֵּל) with
  (סָבִיל) inline in smaller font instead of bare 3ms past form
- Removed פָּעִיל label from active cards; only passive cards carry voice label
- New cards introduced in random order (new.order=0 via _RandomOrderPackage)
- Frequency badge: words outside top 50k show "50k+" instead of blank

README: updated CLI options, output files table, pipeline list, card
descriptions to reflect Sprint 3 state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 10:16:50 +00:00
b018f21b1d feat: Sprint 2 + Sprint 3 — verb list, audio, passive forms, CSS/UX, validation, Heebo font, images
Sprint 2:
- extract_verb_list.py (NEW): downloads Coffin & Bolozky PDF, extracts
  71-verb paradigm list from Appendix 1 with hardcoded fallback.
  Pu'al/Huf'al use '# 3ms:' prefix for 3ms search.
- conjugation_extract.py: audio URL capture per form, passive forms
  parsing (Pu'al/Huf'al partner tables), 3ms search support.
- benyehuda.py: nikkud corpus (txt.zip), index by nikkud word form,
  single best example (longest ≤200 chars), --refresh-examples rebuild.
- apkg_builder.py: Hebrew labels, centered dark Hebrew text, freq-badge,
  related words grouped by PoS. Conjugation: Voice/Audio fields,
  present-tense 12-card expansion, 2fp/3fp modern fallback with
  classical in parens, פָּעִיל/סָבִיל voice labels.
- README.md: rewritten — learner-first structure, data sources.
- run.py: --refresh-examples flag, conjugation audio download (step 4b).
- data/conjugations.json: rebuilt with 70 verbs, audio URLs, passive
  partner data.

Sprint 3:
- validate_verb_list.py (NEW): queries pealim.com for all entries in
  verb input list, classifies as OK/3ms/REVIEW/NOT_FOUND, writes
  cleaned verbs_input.txt. Results: 51 OK, 15 3ms-past, 4 REVIEW.
- apkg_builder.py: binyan in Hebrew (BINYAN_TO_HEBREW map) on its own
  line; remove "דוגמה:" label; "Other" related-words shown unlabeled;
  "50k+" freq display for unlisted words; Image field in VOCAB_MODEL.
- image_fetch.py (NEW): Wikipedia/Commons thumbnails for concrete nouns,
  caches in data/image_cache.json, downloads to data/images/.
- Heebo variable font TTF bundled in both .apkg files via @font-face.
- run.py: step_fonts(), step_images(), --skip-images flag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 08:36:51 +00:00
b086123bec feat: add apkg builder, frequency, Ben Yehuda examples, conjugation deck
Implements four major improvements to the Pealim Anki deck pipeline:

1. Automated .apkg generation (genanki) — no more manual Anki Desktop step.
   Both vocabulary and conjugation decks are built programmatically.

2. Word frequency ranking from hermitdave/FrequencyWords he_50k corpus.
   Notes sorted by rank so Anki presents most common words first.

3. Example sentences from Ben Yehuda public domain corpus (not pealim.com).
   Downloads txt_stripped.zip, indexes 25k texts, ~89% coverage on test set.

4. Conjugation drill deck — one card per form × verb.
   Input: verbs_input.txt (Hebrew infinitives). Initial set: 7 verbs (one
   per binyan). Extracts 28 forms each via pealim.com/search/ + table parse.

New files:
  apkg_builder.py     — genanki deck builder for both decks
  benyehuda.py        — Ben Yehuda corpus downloader + sentence indexer
  frequency_lookup.py — FrequencyWords downloader + rank lookup
  verbs_input.txt     — verb input list (7 test verbs, one per binyan)
  data/               — baseline CSVs + generated caches

Updated:
  conjugation_extract.py — rewritten: reads verbs_input.txt, searches
                           /search/?q= for slug, parses table by row labels
  requirements.txt       — add genanki, beautifulsoup4, lxml
  run.py                 — full orchestration pipeline with CLI flags
  .gitignore             — exclude venv/, benyehuda_index.json, audio/, output/

CLI:
  python run.py --skip-scrape --skip-audio --test 20  (quick test)
  python run.py --skip-scrape                          (full build)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 01:58:31 +00:00