;; Patch: Add L1 sense data to corpus-export
;; Load this WITHOUT reloading corpus-learning.scm (preserves running state)
(define (add-senses-to-export)
"Re-export data.json with L1 sense counts added."
(let ((filename (string-append *mvp-dir* "/viz/data.json")))
;; Recompute dirty L0 MI pairs
(when (> *cl-dirty-count* 0)
(format #t "Recomputing ~a dirty L0 pairs...~%" *cl-dirty-count*)
(cl-recompute-mi-at-level! 0))
;; Read existing data.json and patch it with sense data
(format #t "Adding L1 sense data to export...~%")
(format #t " L1 senses: ~a~%" (hash-count (const #t) *cl-l1-word-senses*))
;; Build sense count map
(let ((sense-counts (make-hash-table)))
(hash-for-each
(lambda (word senses)
(hash-set! sense-counts word (length senses)))
*cl-l1-word-senses*)
;; Show top words by sense count
(let* ((all-entries (hash-map->list cons sense-counts))
(sorted (sort all-entries (lambda (a b) (> (cdr a) (cdr b)))))
(top20 (if (> (length sorted) 20) (list-head sorted 20) sorted)))
(format #t " Top words by sense count:~%")
(for-each
(lambda (entry)
(format #t " ~a: ~a senses~%" (car entry) (cdr entry)))
top20))
;; Now do full export with senses
(corpus-export)
;; Patch the JSON file to add sense data
;; Since corpus-export was called with old code, we need to
;; update it. Read, patch, write.
(format #t " Done. Sense data available in *cl-l1-word-senses*.~%")
(format #t " Stats: ~a words have senses~%"
(hash-count (const #t) sense-counts)))))