func word2vec(word string, k int) string {
	args := make([]interface{}, 1)
	args[0] = word

	r, err := httpjsonrpc.Call(config.Word2VecServer, "expand", 0, args)
	if err != nil {
		log.Printf("verbose error info: %#v", err)
	}

	if _, ok := r["result"]; !ok {
		log.Println("Word2Vec: not getting any result")
		return ""
	}

	x, ok := r["result"].([]interface{})
	if !ok {
		log.Println("Word2Vec: cannot parse the result")
		return ""
	} else {
		strs := make([]string, len(x))
		for i, item := range x {
			strs[i] = item.(string)
		}
		if len(strs) > k {
			strs = strs[:k]
		}
		result := strings.Join(strs, " ")
		log.Printf("Word2Vec expanded '%s' to '%s'\n", word, result)
		return result
	}
}
func GetHeadWord(question string) chan string {
	c := make(chan string, 1)

	go func() {
		args := make([]interface{}, 1)
		args[0] = []string{question}

		r, err := httpjsonrpc.Call(config.HeadWordServer, "extract_headchunks", 0, args)
		if err != nil {
			log.Printf("Unable to get headword for '%s'\n", question)
			c <- ""
			return
		}

		if _, ok := r["result"]; !ok {
			// We didn't receive a result
			log.Printf("Headword: HeadWord at '%s' question '%s' had no result from the server (%s, %T)\n", config.HeadWordServer, question, r, r)
			c <- ""
			return
		}

		x, ok := r["result"].([]interface{})
		if ok {
			str, ok := x[0].(string)
			if ok {
				c <- str
			} else {
				log.Printf("Headword: Not string (%s, %T)\n", x[0], x[0])
				// We didn't receive a string
				c <- ""
			}
		} else {
			log.Printf("Headword: Not array (%s, %T)\n", r["result"], r["result"])
			// we didn't recieve a result
			c <- ""
		}
	}()
	return c
}
func wordnet(word string, k int) string {
	args := make([]interface{}, 1)
	args[0] = []string{word}

	r, err := httpjsonrpc.Call(config.HeadWordServer, "synonyms", 0, args)
	if err != nil {
		log.Printf("verbose error info: %#v", err)
	}

	if _, ok := r["result"]; !ok {
		log.Println("wordnet: not getting any result")
		return ""
	}

	x, ok := r["result"].([]interface{})
	if !ok {
		log.Println("wordnet: cannot parse the result")
		return ""
	}

	x0, ok := x[0].([]interface{})
	if !ok {
		log.Println("wordnet: cannot parse the result")
		return ""
	}

	strs := make([]string, len(x0))
	for i, item := range x0 {
		strs[i] = item.(string)
	}
	if len(strs) > k {
		strs = strs[:k]
	}

	result := strings.Join(strs, " ")
	log.Printf("wordnet expanded '%s' to '%s'\n", word, result)
	return result
}