textCosineSimilarity function
Implementation
double textCosineSimilarity(String text1, String text2) {
// Separa as palavras em cada texto e as coloca em um conjunto para remover duplicatas
final words1Set = text1.split(' ').toSet();
final words2Set = text2.split(' ').toSet();
final words1List = words1Set.toList();
final words2List = words2Set.toList();
// Cria um conjunto com todas as palavras dos dois textos
final allWords = <String>{...words1Set, ...words2Set};
// Calcula a similaridade entre cada par de palavras e armazena o resultado em uma matriz
final matrix = _getWordsSimilarityMatrix(words1List, words2List);
// Cria vetores para cada texto, onde cada posição representa a frequência de uma palavra
final vector1 = _getVector(words1Set, allWords);
final vector2 = _getVector(words2Set, allWords);
vector1.updateAll((key, value) => value == 0? _getGratterSimilarity1(words2List.indexOf(key), matrix) : value);
vector2.updateAll((key, value) => value == 0? _getGratterSimilarity2(words1List.indexOf(key), matrix) : value);
// Calcula o numerador da similaridade angular por cosseno
final dotProduct = _dotProduct(vector1, vector2, matrix, words1List);
// Calcula o denominador da similaridade angular por cosseno
final magnitude1 = _getMagnitude(vector1);
final magnitude2 = _getMagnitude(vector2);
final denominator = magnitude1 * magnitude2;
// Calcula a similaridade angular por cosseno
return dotProduct / denominator;
}