in src/vocabularies/taxonomy/node.go [195:249]
func LoadNodes(fnames ...string) Nodes {
index := make(map[string]int)
nodes := NewNodes()
for _, fname := range fnames {
file, err := os.Open(fname)
if err != nil {
glog.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
lineCnt := 0
for scanner.Scan() {
lineCnt++
line := scanner.Text()
line = strings.TrimSpace(line)
if len(line) > 0 {
values := strings.Split(line, "\t")
slice.TrimSpace(values)
values = slice.RemoveEmpty(values)
var treeNumbers []string
switch len(values) {
case 0, 1:
glog.Fatalf("%s: Too few columns: line %d: '%s'\n", fname, lineCnt, line)
case 2:
treeNumbers = nil
case 3:
treeNumbers = strings.Split(values[2], "|")
default:
glog.Fatalf("%s: Too many columns: line %d: '%s'\n", fname, lineCnt, line)
}
conceptName := values[0]
lowercase := strings.ToLower(conceptName)
synonym := values[1]
if i, ok := index[lowercase]; ok {
nodes[i].AddSynonym(synonym)
nodes[i].AddTreeNumber(treeNumbers...)
} else {
node := NewNode(conceptName)
node.AddSynonym(conceptName)
node.AddSynonym(synonym)
node.AddTreeNumber(treeNumbers...)
index[lowercase] = nodes.Len()
nodes = append(nodes, node)
}
}
}
}
return nodes
}