Skip to content

Instantly share code, notes, and snippets.

@xynobo
Last active November 5, 2023 20:25
Show Gist options
  • Save xynobo/3f0d96f98eaf24f9b0125ee4b10b6d36 to your computer and use it in GitHub Desktop.
Save xynobo/3f0d96f98eaf24f9b0125ee4b10b6d36 to your computer and use it in GitHub Desktop.
Пример сравнения по вектору
Напиши пример кода как в PHP можно сравнить текст по вектору без similar_text
Sun, Nov 5, 2023, 11:17 pm
В PHP вы можете сравнить текст по вектору с помощью функции cosineSimilarity(). Вот пример кода:
Copied! ✅
📝 Copy Code
➕ Insert Code
function cosineSimilarity($text1, $text2) {
$vector1 = getWordVector($text1);
$vector2 = getWordVector($text2);
$dotProduct = 0;
$magnitude1 = 0;
$magnitude2 = 0;
foreach ($vector1 as $word => $weight) {
if (isset($vector2[$word])) {
$dotProduct += $weight * $vector2[$word];
}
$magnitude1 += $weight * $weight;
}
foreach ($vector2 as $word => $weight) {
$magnitude2 += $weight * $weight;
}
$magnitude1 = sqrt($magnitude1);
$magnitude2 = sqrt($magnitude2);
if ($magnitude1 == 0 || $magnitude2 == 0) {
return 0;
} else {
return $dotProduct / ($magnitude1 * $magnitude2);
}
}
function getWordVector($text) {
$words = preg_split("/\s+/", $text);
$vector = [];
foreach ($words as $word) {
if (isset($vector[$word])) {
$vector[$word]++;
} else {
$vector[$word] = 1;
}
}
return $vector;
}
// Пример использования
$text1 = "Это пример текста для сравнения";
$text2 = "Это другой текст для сравнения";
$similarity = cosineSimilarity($text1, $text2);
echo "Коэффициент сходства: " . $similarity;
В этом примере функция cosineSimilarity() сравнивает два текста по вектору. Она использует функцию getWordVector() для создания вектора каждого текста. Затем она вычисляет скалярное произведение векторов и их магнитуды, чтобы получить коэффициент сходства.
Обратите внимание, что этот пример предполагает, что тексты уже предварительно обработаны и разделены на слова. Если вам нужна более сложная обработка текста, вам может потребоваться использовать библиотеку для обработки естественного языка, например, nltk или spaCy.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment