Изучение различных методов расчета сходства косинусов в PHP

Косинусное сходство — широко используемый показатель при анализе текста и поиске информации для определения сходства между двумя векторами, представляющими текстовые документы. В этой статье блога мы рассмотрим различные методы вычисления сходства косинусов в PHP и предоставим примеры кода для каждого метода.

Метод 1: расчет вручную
Один из способов расчета косинусного подобия — вручную реализовать формулу. Вот пример фрагмента кода:

function cosineSimilarity($vector1, $vector2) {
    // Calculate dot product
    $dotProduct = 0;
    foreach ($vector1 as $key => $value) {
        if (isset($vector2[$key])) {
            $dotProduct += $vector1[$key] * $vector2[$key];
        }
    }
// Calculate magnitude
    $magnitude1 = sqrt(array_sum(array_map(function ($value) {
        return $value * $value;
    }, $vector1)));
    $magnitude2 = sqrt(array_sum(array_map(function ($value) {
        return $value * $value;
    }, $vector2)));
    // Calculate cosine similarity
    if ($magnitude1 != 0 && $magnitude2 != 0) {
        return $dotProduct / ($magnitude1 * $magnitude2);
    } else {
        return 0;
    }
}
// Example usage
$vector1 = [0.2, 0.4, 0.6];
$vector2 = [0.3, 0.5, 0.7];
$similarity = cosineSimilarity($vector1, $vector2);
echo "Cosine Similarity: " . $similarity;

Метод 2: использование функции SimilarText
PHP предоставляет встроенную функцию под названием similar_text, которая вычисляет сходство между двумя строками с использованием формулы косинусного сходства. Вот пример:

$string1 = 'PHP is a popular scripting language.';
$string2 = 'PHP is widely used for web development.';
$similarity = similar_text($string1, $string2, $percent);
echo "Cosine Similarity: " . $percent . "%";

Метод 3: использование внешних библиотек
Существует несколько библиотек PHP, которые обеспечивают эффективную реализацию расчета косинусного сходства. Одной из популярных библиотек является библиотека TextRank. Вот пример того, как его использовать:

use TextRank\Document;
use TextRank\Similarity\Cosine;
$text1 = 'This is the first text.';
$text2 = 'This is the second text.';
$document1 = new Document($text1);
$document2 = new Document($text2);
$similarity = Cosine::similarity($document1, $document2);
echo "Cosine Similarity: " . $similarity;

В этой статье мы рассмотрели различные методы вычисления сходства косинусов в PHP. Мы начали с ручной реализации с использованием формулы косинусного подобия, затем рассмотрели использование встроенной функции similar_textи, наконец, обсудили использование внешних библиотек, таких как TextRank. В зависимости от вашего конкретного варианта использования и требований вы можете выбрать метод, который лучше всего соответствует вашим потребностям.

Используя эти методы, вы можете эффективно вычислять сходство косинусов в PHP для различных приложений анализа текста и поиска информации.