getweets($user, $id); // Filtrer les phrases vides $texts = array_filter($texts, function($phrase) { return !empty(trim($phrase)); // Ignore les chaînes vides ou contenant uniquement des espaces }); // Initialiser un tableau pour stocker les occurrences des phrases $occurrences = []; foreach ($texts as $index1 => $phrase1) { foreach ($texts as $index2 => $phrase2) { if ($index1 !== $index2) { $similarity = $this->cosineSimilarity($phrase1, $phrase2); // Vous pouvez ajuster le seuil de similarité en fonction de vos besoins if ($similarity > 0.5) { // Incrémenter le compteur pour les deux phrases $occurrences[$index1] = isset($occurrences[$index1]) ? $occurrences[$index1] + 1 : 1; $occurrences[$index2] = isset($occurrences[$index2]) ? $occurrences[$index2] + 1 : 1; } } } } // Trouver l'index de la phrase avec le comptage le plus élevé $indexPhrasePlusFrequente = (!empty($occurrences)) ? array_search(max($occurrences), $occurrences) : null; // Récupérer la phrase avec le comptage le plus élevé $phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null; if ($phrasePlusFrequente != null) { // Supprimer les hashtags $phrasePlusFrequente = preg_replace('/#\w+\s?/', '', $phrasePlusFrequente); // Supprimer les tags $phrasePlusFrequente = preg_replace('/@\w+\s?/', '', $phrasePlusFrequente); // Supprimer les emojis $phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente); return $phrasePlusFrequente; } else { $tweetcomments = config('twitter.sentence_for_random_comment'); return Arr::random($tweetcomments); } } private function cosineSimilarity($text1, $text2) { $words1 = str_word_count(strtolower($text1), 1); $words2 = str_word_count(strtolower($text2), 1); $allWords = array_unique(array_merge($words1, $words2)); $vector1 = $vector2 = []; // Construire les vecteurs avec les fréquences des mots foreach ($allWords as $word) { $vector1[] = in_array($word, $words1) ? 1 : 0; $vector2[] = in_array($word, $words2) ? 1 : 0; } $dotProduct = 0; // Calculer le produit scalaire des vecteurs for ($i = 0; $i < count($allWords); $i++) { $dotProduct += $vector1[$i] * $vector2[$i]; } $magnitude1 = sqrt(array_sum($vector1)); $magnitude2 = sqrt(array_sum($vector2)); if ($magnitude1 * $magnitude2 == 0) { return 0; // Pour éviter une division par zéro } return $dotProduct / ($magnitude1 * $magnitude2); } private function remove_emojis($string) { // Match all emojis (including extended ones) $regex_emojis = '/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}]/u'; $clear_string = preg_replace($regex_emojis, '', $string); return $clear_string; } }