func Analyse()

in pkg/linguist/analyse.go [49:76]


func Analyse(contents []byte, hints []string) (language string) {
	document := tokenizer.Tokenize(contents)
	classifier := getClassifier()
	scores, idx, _ := classifier.LogScores(document)

	if len(hints) == 0 {
		return string(classifier.Classes[idx])
	}

	langs := map[string]struct{}{}
	for _, hint := range hints {
		langs[hint] = struct{}{}
	}

	bestScore := math.Inf(-1)
	bestAnswer := ""

	for id, score := range scores {
		answer := string(classifier.Classes[id])
		if _, ok := langs[answer]; ok {
			if score >= bestScore {
				bestScore = score
				bestAnswer = answer
			}
		}
	}
	return bestAnswer
}