В данной статье будет представлен простой анализатор текста, который используется для проверки текста на различные параметры SEO оптимизации. Оценка проводится по нескольким критериям, таким как количество слов, заспамленность, вода, плотность ключевых слов, общая плотность ключевых слов, оценка ключевых слов в заголовках, оценка за ключевые слова в начале текста и общий балл. В этой статье будет подробно рассмотрено устройство и функциональность скрипта анализатора текста.
Наш репозиторий на github.com
Технологии анализатора текста
Энтропия текста
Для расчета "воды" в тексте используется понятие "энтропия текста". Энтропия текста позволяет определить степень разнообразия слов в тексте. Чем выше энтропия текста, тем больше разнообразие слов, и, следовательно, выше вероятность наличия лишней информации или плохой качественной информации в тексте. Для использования этой технологии в анализаторе текста необходимо провести анализ частоты употребления слов и вычислить энтропию текста.
Расчет плотности ключевых слов
Одной из ключевых технологий анализатора текста является расчет плотности каждого ключевого слова в тексте. Для этого используется подсчет количества вхождений каждого ключевого слова и деление этого числа на общее количество слов в тексте. Это позволяет определить, насколько часто употребляется каждое ключевое слово и насколько оно соответствует требованиям оптимизации текста для поисковых систем.
Оценка расположения ключевых слов
Скрипт анализатора также проводит оценку расположения ключевых слов в тексте. Это включает в себя проверку наличия ключевых слов в заголовках, в начале текста и общую оценку их распределения в тексте. Для этого используются алгоритмы, основанные на анализе структуры текста и его ключевых компонентов.
Пример использования анализатора текста
Работу анализатора можно посмотреть здесь. Вы можете ввести текст в редактор и нажать кнопку "Анализ текста", чтобы получить оценку по представленным параметрам.
Работа анализатора представлена в разделе "Дополнительно" на сайте.
Скрипт написан на языке php
$preparedText = mb_strtolower($text['content'], 'UTF-8'); // Приведение текста к нижнему регистру $tokenizedText = preg_split('/\s+/', $preparedText); // Разделение текста на слова по пробелам $totalWords = count($tokenizedText); // Общее число слов в тексте echo 'Слов '.$totalWords.' '; // Ассоциативный массив для хранения вхождений каждой уникальной ключевой фразы $keywordOccurrences = array(); // Функция для подсчета вхождений ключевого слова/фразы function keywordDensity($text, $keyword, $totalWords) { $count = preg_match_all('/\b' . preg_quote($keyword, '/') . '\b/iu', $text, $matches); $density = $count / $totalWords * 100; return ['count' => $count, 'density' => $density]; } // Обработка и сохранение результатов для каждого ключевого слова/фразы foreach ($keywords as $keyword) { // Приводим ключевое слово к нижнему регистру $keywordLower = mb_strtolower($keyword, 'UTF-8'); // Если ключевое слово уже обработано, пропускаем его if (isset($keywordOccurrences[$keywordLower])) { continue; } $result = keywordDensity($preparedText, $keywordLower, $totalWords); $keywordOccurrences[$keywordLower] = $result; } function calculateTextEntropy($text) { $words = str_word_count(mb_strtolower($text), 1); $wordFrequencies = array_count_values($words); $entropy = 0.0; $totalWords = array_sum($wordFrequencies); foreach ($wordFrequencies as $frequency) { $p = $frequency / $totalWords; $entropy -= $p * log($p); } // Нормализация энтропии путем деления на максимально возможное значение (log($totalWords)) return $entropy / log($totalWords); } function calculateKeywordDensity($text, $keywords) { $words = str_word_count(mb_strtolower($text), 1); $totalWords = count($words); $keywordMatches = 0; foreach ($keywords as $keyword) { $keywordMatches += substr_count(mb_strtolower($text), mb_strtolower($keyword)); } return ($keywordMatches / $totalWords) * 100; } // Для расчета "воды" можно использовать "энтропию текста" $entropy = calculateTextEntropy($text['content']); $waterContent = (1 - $entropy) * 100; // Ключевые слова для расчета заспамленности $spamLevel = calculateKeywordDensity($text['content'], $keywords); echo "Заспамленность: " . round($spamLevel, 2) . "% "; echo "Вода: " . round($waterContent, 2) . "% "; function calculateKeywordDensity2($text, $keywords) { // Приводим весь текст к нижнему регистру $textLower = mb_strtolower($text); // Удаляем HTML теги из текста $textCleaned = strip_tags($textLower); $preparedText = mb_strtolower($text, 'UTF-8'); // Приведение текста к нижнему регистру $tokenizedText = preg_split('/\s+/', $preparedText); // Разделение текста на слова по пробелам $totalWords = count($tokenizedText); // Общее число слов в тексте // Массив для подсчета вхождений каждого ключевого слова $keywordCounts = array(); // Перебираем ключевые слова и считаем их вхождения foreach ($keywords as $keyword) { $keyLower = mb_strtolower(trim($keyword)); $count = substr_count(trim($textLower), trim($keyLower)); $keywordCounts[$keyLower] = isset($keywordCounts[$keyLower]) ? $keywordCounts[$keyLower] + $count : $count; } // Общий процент плотности ключевых слов $totalKeywordDensity = 0; // Выводим плотность для каждого ключевого слова или фразы foreach ($keywordCounts as $keyword => $count) { $keywordDensity = ($count / $totalWords) * 100; $totalKeywordDensity += $keywordDensity; echo "Плотность для '{$keyword}': " . number_format($keywordDensity, 2) . "% ({$count}/{$totalWords}) "; } // Выводим общую плотность ключевых слов echo "Общая плотность ключевых слов: " . number_format($totalKeywordDensity, 2) . "% "; return $keywordCounts; } calculateKeywordDensity2($text['content'], $keywords); function getTextFromTags($html, $tagName) { $dom = new DOMDocument(); @$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); $tags = $dom->getElementsByTagName($tagName); $texts = []; foreach ($tags as $tag) { $texts[] = strtolower($tag->nodeValue); } return $texts; } // Проверка ключевых слов и фраз в заголовках function checkKeywordsInTitles($html, $keywords) { $score = 0; foreach (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as $tag) { $texts = getTextFromTags($html, $tag); foreach ($texts as $text) { foreach ($keywords as $keyword) { if (strpos($text, strtolower($keyword)) !== false) { $score += 2; // Назначаем 2 балла за каждое ключевое слово в заголовке } } } } return $score; } // Проверка ключевых слов и фраз в начале текста (первые 500 символов) function checkKeywordsInBeginning($text, $keywords) { $score = 0; $beginning = substr(strtolower($text), 0, 500); foreach ($keywords as $keyword) { if (strpos($beginning, strtolower($keyword)) !== false) { $score += 3; // Назначаем 3 балла за ключевое слово в начале текста } } return $score; } // Текст без html тэгов для простоты анализа $textContent = strtolower(strip_tags($text['content'])); // Подсчет баллов $titlesScore = checkKeywordsInTitles($text['content'], $keywords); $beginningScore = checkKeywordsInBeginning($textContent, $keywords); $totalScore = $titlesScore + $beginningScore; // Вывод результатов echo " Оценка по ключевым словам в заголовках: $titlesScore\n"; echo " Оценка за ключевые слова в начале текста: $beginningScore\n"; echo " Общий балл: $totalScore\n"; if ($totalScore > 10) { echo " Контент имеет отличное распределение ключевых слов."; } elseif ($totalScore > 5) { echo " Контент имеет хорошее распределение ключевых слов."; } else { echo " Контент нуждается в улучшении в распределении ключевых слов."; }
Заключение
Простой анализатор текста представляет собой мощный инструмент для оценки и оптимизации текста с точки зрения SEO. Технологии, использованные в этом анализаторе, позволяют проводить первичный анализ текста и выявлять проблемные моменты, которые могут влиять на его оптимизацию для поисковых систем. Понимание работы этих технологий и их применение в SEO позволяют значительно улучшить качество текстов и их ранжирование в поисковых системах.