67 lines
1.1 KiB
Go
67 lines
1.1 KiB
Go
package multibayes
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
)
|
|
|
|
type jsonableClassifier struct {
|
|
Matrix *sparseMatrix `json:"matrix"`
|
|
}
|
|
|
|
func (c *Classifier) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(&jsonableClassifier{c.Matrix})
|
|
}
|
|
|
|
func (c *Classifier) UnmarshalJSON(buf []byte) error {
|
|
j := jsonableClassifier{}
|
|
|
|
err := json.Unmarshal(buf, &j)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
*c = *NewClassifier()
|
|
c.Matrix = j.Matrix
|
|
|
|
return nil
|
|
}
|
|
|
|
// Initialize a new classifier from a JSON byte slice.
|
|
func NewClassifierFromJSON(buf []byte) (*Classifier, error) {
|
|
classifier := &Classifier{}
|
|
|
|
err := classifier.UnmarshalJSON(buf)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return classifier, nil
|
|
}
|
|
|
|
func LoadClassifierFromFile(filename string) (*Classifier, error) {
|
|
buf, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewClassifierFromJSON(buf)
|
|
}
|
|
|
|
func (s *sparseColumn) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(s.Data)
|
|
}
|
|
|
|
func (s *sparseColumn) UnmarshalJSON(buf []byte) error {
|
|
var data []int
|
|
|
|
err := json.Unmarshal(buf, &data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
s.Data = data
|
|
|
|
return nil
|
|
}
|