encoding.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package multibayes
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. )
  6. type jsonableClassifier struct {
  7. Matrix *sparseMatrix `json:"matrix"`
  8. }
  9. func (c *Classifier) MarshalJSON() ([]byte, error) {
  10. return json.Marshal(&jsonableClassifier{c.Matrix})
  11. }
  12. func (c *Classifier) UnmarshalJSON(buf []byte) error {
  13. j := jsonableClassifier{}
  14. err := json.Unmarshal(buf, &j)
  15. if err != nil {
  16. return nil
  17. }
  18. *c = *NewClassifier()
  19. c.Matrix = j.Matrix
  20. return nil
  21. }
  22. // Initialize a new classifier from a JSON byte slice.
  23. func NewClassifierFromJSON(buf []byte) (*Classifier, error) {
  24. classifier := &Classifier{}
  25. err := classifier.UnmarshalJSON(buf)
  26. if err != nil {
  27. return nil, err
  28. }
  29. return classifier, nil
  30. }
  31. func LoadClassifierFromFile(filename string) (*Classifier, error) {
  32. buf, err := ioutil.ReadFile(filename)
  33. if err != nil {
  34. return nil, err
  35. }
  36. return NewClassifierFromJSON(buf)
  37. }
  38. func (s *sparseColumn) MarshalJSON() ([]byte, error) {
  39. return json.Marshal(s.Data)
  40. }
  41. func (s *sparseColumn) UnmarshalJSON(buf []byte) error {
  42. var data []int
  43. err := json.Unmarshal(buf, &data)
  44. if err != nil {
  45. return err
  46. }
  47. s.Data = data
  48. return nil
  49. }