func LoadNodes()

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
}