textCosineSimilarity function

double textCosineSimilarity(
  1. String text1,
  2. String text2
)

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;
}