В php мне нужно загрузить файл и получить все слова и повторить слово и количество раз, когда каждое слово отображается в тексте (мне также нужно, чтобы они отображались в порядке убывания наиболее используемых слов сверху) ★ ✩
Вот пример:
$text = "A very nice únÌcÕdë text. Something nice to think about if you're into Unicode."; // $words = str_word_count($text, 1); // use this function if you only want ASCII $words = utf8_str_word_count($text, 1); // use this function if you care about i18n $frequency = array_count_values($words); arsort($frequency); echo '<pre>'; print_r($frequency); echo '</pre>';
Выход:
Array ( [nice] => 2 [if] => 1 [about] => 1 [you're] => 1 [into] => 1 [Unicode] => 1 [think] => 1 [to] => 1 [very] => 1 [únÌcÕdë] => 1 [text] => 1 [Something] => 1 [A] => 1 )
И utf8_str_word_count()
, если вам это нужно:
function utf8_str_word_count($string, $format = 0, $charlist = null) { $result = array(); if (preg_match_all('~[\p{L}\p{Mn}\p{Pd}\'\x{2019}' . preg_quote($charlist, '~') . ']+~u', $string, $result) > 0) { if (array_key_exists(0, $result) === true) { $result = $result[0]; } } if ($format == 0) { $result = count($result); } return $result; }
$ words = str_word_count ($ text, 1); $ word_frequencies = array_count_values ($ words); arsort ($ word_frequencies); print_r ($ word_frequencies);
Эта функция использует регулярное выражение для поиска слов (вы можете изменить его, в зависимости от того, что вы определяете как слово)
function count_words($text) { $output = $words = array(); preg_match_all("/[A-Za-z'-]+/", $text, $words); // Find words in the text foreach ($words[0] as $word) { if (!array_key_exists($word, $output)) $output[$word] = 0; $output[$word]++; // Every time we find this word, we add 1 to the count } return $output; }
Это повторяется над каждым словом, создавая ассоциативный массив (со словом в качестве ключа), где значение относится к вхождениям каждого слова. (например, $ output ['hello'] = 3 => привет в 3 раза в тексте).
Возможно, вы захотите изменить функцию, чтобы иметь дело с нечувствительностью к регистру (т.е. «привет» и «привет» – это не одно и то же слово, согласно этой функции).
echo count(explode('your_word', $your_text));