in src/vocabularies/umls/umls.go [18:66]
func Load(fname string) *taxonomy.Taxonomy {
file, err := os.Open(fname)
if err != nil {
glog.Fatal(err)
}
defer file.Close()
ids := set.New()
root := taxonomy.NewNode("root")
var de *taxonomy.Node
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
line = strings.TrimSpace(line)
if len(line) == 0 {
continue
}
values := strings.Split(line, "|")
if len(values) < 17 {
fmt.Printf("Wrong number of columns; expected %d: %s\n", 17, line)
continue
}
lang := strings.TrimSpace(values[1])
vocabularly := strings.TrimSpace(values[11])
if lang != "ENG" || vocabularly != "SNOMEDCT_US" && vocabularly != "MSH" {
continue
}
id := strings.TrimSpace(values[0])
name := strings.TrimSpace(values[14])
if ids[id] {
de.AddSynonym(name)
} else {
ids.Add(id)
de = taxonomy.NewNode(name)
de.AddTreeNumber(id)
de.AddSynonym(name)
root.AddChild(de)
}
}
t := taxonomy.New(root)
t.SetBaseIndex()
return t
}