func loadTaxonomy()

in src/vocabularies/mesh/mesh.go [94:135]


func loadTaxonomy(fname string) *taxonomy.Taxonomy {
	file, err := os.Open(fname)
	if err != nil {
		glog.Fatal(err)
	}
	defer file.Close()

	byteValue, _ := ioutil.ReadAll(file)

	var descriptors Descriptors
	if err := xml.Unmarshal(byteValue, &descriptors); err != nil {
		glog.Fatal(err)
	}

	root := taxonomy.NewNode("root")

	for _, d := range descriptors.Descriptors {
		treeNumbers := d.TreeNumbers.TreeNumbers
		if HasAnimalCode(treeNumbers) {
			continue
		}
		treeNumbers = Trim(treeNumbers)
		if len(treeNumbers) == 0 {
			continue
		}
		de := taxonomy.NewNode(d.Name.Value)
		for _, c := range d.Concepts.Concepts {
			if !isAnimalConcept(c.Name.Value) {
				ce := taxonomy.NewNode(c.Name.Value)
				for _, t := range c.Terms.Terms {
					ce.AddSynonym(t.Name)
				}
				ce.AddSynonym(c.Name.Value)
				ce.AddTreeNumber(treeNumbers...)
				de.AddChild(ce)
			}
		}
		root.AddChild(de)
	}

	return taxonomy.New(root)
}