training.scm 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. (library (training)
  2. (export train
  3. display-for-training
  4. ?vector->string
  5. display-key-and-val
  6. default-attr-pred
  7. word->string)
  8. (import (except (rnrs base)
  9. vector-map
  10. vector-for-each)
  11. (only (guile)
  12. lambda* λ
  13. ;; control structures
  14. when
  15. ;; output
  16. display
  17. simple-format
  18. current-output-port
  19. ;; strings
  20. string-join
  21. string-count
  22. call-with-output-string)
  23. (ice-9 match)
  24. (srfi srfi-1)
  25. (contract)
  26. (alist-utils)
  27. (prefix (io) io:)
  28. (model)
  29. (paginated-output))
  30. (define count-lines
  31. (λ (str)
  32. (+ (string-count str
  33. (λ (char)
  34. (char=? char #\newline)))
  35. 1)))
  36. (define show-for-training
  37. (λ (word-as-string)
  38. (let ([num-lines (- (count-lines word-as-string) 1)])
  39. (output-paginated word-as-string num-lines))))
  40. (define ?vector->string
  41. (λ (?vec)
  42. (if (vector? ?vec)
  43. (string-join (vector->list ?vec) ", ")
  44. ?vec)))
  45. (define display-key-and-val
  46. (lambda* (key val #:optional (port (current-output-port)))
  47. (display (simple-format #f "~a: ~a\n" key val) port)))
  48. (define-with-contract word->string
  49. (require (procedure? attr-pred))
  50. (ensure (string? <?>))
  51. (λ (word attr-pred)
  52. (let ([metadata (alist-refs word '("metadata"))]
  53. [translation-data (alist-refs word '("translation-data"))])
  54. (call-with-output-string
  55. (λ (port)
  56. ;; check metadata
  57. (for-each (λ (datum)
  58. (match datum
  59. [(key . val)
  60. (when (attr-pred datum)
  61. (display-key-and-val key
  62. (?vector->string val)
  63. port))]))
  64. metadata)
  65. ;; check translation data
  66. (for-each (λ (datum)
  67. (match datum
  68. [(key . val)
  69. (when (attr-pred datum)
  70. (display-key-and-val key
  71. (?vector->string val)
  72. port))]))
  73. translation-data))))))
  74. (define default-attr-pred
  75. (λ (attr)
  76. (match attr
  77. [(key . val)
  78. (member key '("description" "native"))])))
  79. (define-with-contract train
  80. (require (vocabulary? voc))
  81. (ensure)
  82. (lambda* (voc #:key (attribute-predicate default-attr-pred))
  83. (let* ([words (vocabulary-words voc)]
  84. [num-words (vector-length words)])
  85. (let iter ([index° 0])
  86. (when (< index° num-words)
  87. (let ([word (vector-ref words index°)])
  88. (show-for-training
  89. (word->string word attribute-predicate))
  90. (iter (+ index° 1)))))))))