Считать фразы в строке в PHP

В настоящее время я просматриваю HTML-страницу и подсчитываю единственные слова на странице, используя:

$page_content = file_get_html($url)->plaintext; $word_array = array_count_values(str_word_count(strip_tags(strtolower($page_content)); 

Это отлично подходит для подсчета отдельных слов.

Но я пытаюсь подсчитать фразы длиной до 3 слов.

Например:

 $string = 'the best stack post'; 

Счет вернется:

 the = 1 best = 1 stack = 1 post = 1 

Мне нужны фразы, чтобы вырваться из строки, поэтому фраза из трех слов из этой строки может быть:

 the best stack = 1 best stack post = 1 

Надеюсь это имеет смысл!

Я искал, но не могу найти способ сделать это на PHP.

Есть идеи?

Solutions Collecting From Web of "Считать фразы в строке в PHP"

Итак, для этого решения есть два шага.

  1. Есть функция, которая получает все 3 слова фразы из строки (игнорируя любые полные остановки)
  2. Основная функция будет использовать предыдущую функцию для каждого предложения (заканчивается . ).

Вот код:

 function threeWords($string) { $words = array_values(array_filter(preg_split("!\W!",$string))); //Split on non-word characters. Not ideal probably since it will count "non-hyphenated" as 2 words. if (count($words) < 3) { return []; } $phrases = []; for ($i = 2;$i < count($words);$i++) { $phrases[] = $words[$i-2]." ".$words[$i-1]." ".$words[$i]; } return $phrases; } $page_content = file_get_html($url)->plaintext; $text = strip_tags(strtolower($page_content)); $sentences = explode(".",$text); $phrases = []; foreach ($sentences as $sentence) { $phrases = array_merge($phrases,threeWords(trim($sentence))); } $count = array_count_values($phrases); print_r($count); 

Что бы я сделал, это получить содержимое страницы и удалить теги html. Затем взорвите текст типичным разделителем фразы, который является точкой (.). Теперь у вас есть массив отдельных фраз, для которых вы можете считать одиночные слова:

 $page_content = file_get_html($url)->plaintext; $text = strip_tags(strtolower($page_content)); $phrases = explode(".", $text); $count = 0; foreach ($phrases as $phrase) { if (str_word_count($phrase) >= 3) { $count++; } } 
 // Split the string into sentences on the appropriate punctuation marks // and loop over the sentences foreach (preg_split('/[?.!]/', $string) as $sentence) { // split the sentences into words (remove any empty strings with array_filter) $words = array_filter(explode(' ', $sentence)); // take the first set of three words from the sentence, then remove the first word, // until the sentence is gone. while ($words) { $phrase = array_slice($words, 0, 3); // check that the phrase is the correct length if (count($phrase) == 3) { // convert it back to a string $phrase = implode(' ', $phrase); // increment the count for that phrase in your result if (!isset($phrases[$phrase])) $phrases[$phrase] = 0; $phrases[$phrase]++; } array_shift($words); } }