OverviewFilesCommitsIssuesDocsReleasesPeers

hypercore-kb / opencog-kb / language-learning / mvp / patch-export.scm

42 lines · scm ref:
;; 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)))))