Сценарий ниже будет считывать содержимое удаленного URL, удалять HTML-теги и подсчитывать вхождения каждого уникального слова в нем.
Предостережение: в вашем ожидаемом выводе значение "This" имеет значение 2, но ниже учитывается регистр, поэтому и "this", и "This" записываются как отдельные слова. Вы можете преобразовать всю входную строку в нижний регистр перед обработкой, если исходный регистр не имеет значения для ваших целей.
Кроме того, поскольку на входе запускаются только базовые метки strip_tags, неправильно сформированные теги не будут удалены, поэтому предполагается, что ваш исходный html действителен.
Редактировать: Чарли указывает в комментариях, что такие вещи, как head
, все равно будут учитываться. С помощью функции, определенной в пользовательских примечаниях функции strip_tags , теперь об этом также заботятся.
generichtml.com
<html>
<body>
<h1> This is the title </h1>
<p> some description text here, <b>this</b> is a word. </p>
</body>
</html>
parser.php
// Fetch remote html
$contents = file_get_contents($htmlurl);
// Get rid of style, script etc
$search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<head>.*?</head>@siU', // Lose the head section
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA
);
$contents = preg_replace($search, '', $contents);
$result = array_count_values(
str_word_count(
strip_tags($contents), 1
)
);
print_r($result);
?>
Выход:
Array
(
[This] => 1
[is] => 2
[the] => 1
[title] => 1
[some] => 1
[description] => 1
[text] => 1
[here] => 1
[this] => 1
[a] => 1
[word] => 1
)