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
}