2015-05-17 3 views
-1

У меня была эта идея для полностью динамического сценария ключевых слов, который позволил бы мне просто писать контент для моего сайта/когда люди размещают на моем сайте и автоматически генерируют ключевые слова из контента, который они разместили. .. Я изучил этот метод ниже, но я не уверен, как двигаться вперед. Любая помощь приветствуется.Полностью динамические ключевые слова с использованием PHP

<?php 
    $content = "everything inside the body of the page"; 
    $common = array(' a ', ' the ', ' I '); 
    $replaced = str_replace($common, ' ', strip_tags($content)); 
    $array = str_word_count($replaced, 1); 
    $count = array_count_values($array); 
?> 

Этот код берет содержание страницы, раздевает HTML-теги из него, создает массив из всего контента с каждым словом, имеющим значение, сколько раз он используется на странице.

Как я могу фильтровать этот массив для слов, которые используются больше, чем X раз?

EDIT: Благодаря Jan для предоставления их решения, очень полезно для того, что мне нужно было сделать, в конечном итоге немного изменил его (не слишком меня ненавижу, но я объединил его в одну строку, чтобы сэкономить место).

if (isset($page['content']) and $page['content'] != ' ') { 
    foreach (array_count_values(str_word_count(str_replace(array('nbsp', ' nbsp ', ' something ', ' that ', ' does ', 'that', ' that ', ' have ',' with', ' this ', ' from ', ' they ', ' will ', ' would ', ' there ', ' their ', ' what ', ' about ', ' which ', ' when ', ' make ', ' like ', ' time ', ' just ', ' know ', ' take ', ' person ', ' into ', ' year ', ' your ', ' good ', ' some ', ' could ', ' them ', ' other ', ' than ', ' then ', ' look ', ' only ', ' come ', ' over ', ' think ', ' also ', ' back ', ' after ', ' work ', ' first ', ' well ', ' even ', ' want ', ' because ', ' these ', ' give ', ' most '), ' ', strip_tags($page['content'])), 1)) as $keyword => $frequency) { 
     if ($frequency >= '3' and strlen($keyword) >= '4' and strlen($keyword) <= '10' and strpos($keywords, $keyword) === false) { 
      $keywords .= strtolower($keyword).', '; 
     } 
    } 
    echo '<meta name="keywords" content="'.trim($keywords, ", ").'"/>'; 
} 
+0

Как я смог бы отфильтровать этот массив для слов, которые используются более чем Х количество раз? - Пожалуйста, объясни. Дайте нам представление о том, какой результат вы ожидаете. – Kishor

ответ

-1

вы можете перебрать массив и проверить значение каждого ключа и если он достаточно высокий, то добавьте ключ в новый массив в качестве значения.

$min_count = 1; // Number of times the word should be found inside the content to be considered as a keyword 
$keywords = array(); 
foreach ($count as $keyword => $value) { 
    if ($value >= $min_count) { 
     $keywords[] = $keyword; 
    } 
} 

$keywords теперь держит слова, которые интересны для вас.

+0

Спасибо! Это было очень полезно ... я обновил свой вопрос с помощью решения, которое я использовал. – lsrwLuke

0

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

-1
<?php 

// exclude words appearing more than this many times 
$limit = 3; 

// exclude these words 
$wordsToExclude = array('a', 'the'); 

// the content 
$content = "everything inside the body of the page a a a test test test test don't feed the elephants inside"; 

// better way of splitting into words - http://stackoverflow.com/questions/790596/split-a-text-into-single-words 
$words = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', $content, -1, PREG_SPLIT_NO_EMPTY); 

// count how many times each word appears. this will create an array with words as the keys, and counts as the values 
$uniqueWords = array_count_values($words); 

foreach($uniqueWords as $word => $count) 
{ 
    // remove excluded words, and words appearing more times than the limit 
    if (in_array($word, $wordsToExclude) || $count > $limit) { 
     unset($uniqueWords[$word]); 
    } 
} 

var_dump($uniqueWords); 

Пример вывода:

array (size=8) 
    'everything' => int 1 
    'inside' => int 2 
    'body' => int 1 
    'of' => int 1 
    'page' => int 1 
    'don't' => int 1 
    'feed' => int 1 
    'elephants' => int 1 

Вы можете просто использовать все слова (с помощью array_values($uniqueWords)) или использовать счетчики тоже как некоторая форма взвешивания.

0

Просто добавьте

arsort($count); 

И взять столько ключей с максимальными подсчетов, как вы хотите

Смежные вопросы