Мне нужен PHP-скрипт, который берет URL-адрес веб-страницы, а затем повторяет, сколько раз упоминается слово.
Это общая HTML-страница:
<html> <body> <h1> This is the title </h1> <p> some description text here, <b>this</b> is a word. </p> </body> </html>
Это будет скрипт PHP:
<?php htmlurl="generichtml.com"; the script here echo(result); ?>
Таким образом, вывод будет такой:
WORDS Mentions This 2 is 2 the 1 title 1 some 1 description 1 text 1 a 1 word 1
Это что-то вроде поисковых ботов, когда они занимаются серфингом в Интернете, поэтому, любая идея о том, как начать, или, что еще лучше, у вас есть PHP-скрипт, который уже делает это?
В одной строке ниже будет учитываться регистр без учета регистра после удаления всех тегов HTML из вашей строки.
Живой пример
print_r(array_count_values(str_word_count(strip_tags(strtolower($str)), 1)));
Чтобы захватить исходный код страницы, вы можете использовать cURL или file_get_contents ()
$str = file_get_contents('http://www.example.com/');
Изнутри:
1
возвращает массив, содержащий все слова, найденные внутри строки. В приведенном ниже скрипте будет отображаться содержимое удаленного URL-адреса, удалить теги html и подсчитать вхождения каждого уникального слова в нем.
Предостережение: в вашем ожидаемом выходе «This» имеет значение 2, но ниже учитывается регистр, поэтому оба «это» и «это» записываются как отдельные слова. Вы coudl преобразуете всю строку ввода в нижний регистр перед обработкой, если исходный случай не является значимым для ваших целей.
Кроме того, поскольку на входе выполняется только базовый 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 )
Предыдущий код – это точка начала. Следующий шаг – удалить html-теги с регулярными выражениями. Ищите функции ereg и eregi. Некоторые трюки необходимы для стилей и тегов скриптов (вам нужно удалить содержимое) Точки и запятые должны быть удалены тоже …
Это мой код для подсчета слов, содержащих теги html:
$sayilacak_metin = str_replace(" ", " ", $sayilacak_metin); $sayilacak_metin = preg_replace("/<([^>]*(<|$))/", "<$1", $sayilacak_metin); $sayilacak_metin = strip_tags($sayilacak_metin); $sayilacak_metin = str_replace(chr(194)," ",$sayilacak_metin); $sayilacak_metin = str_replace(chr(160)," ",$sayilacak_metin); $sayilacak_metin = preg_replace(array('/\s{2,}/', '/[\r\t\n]/','/\r/','/\t/','/\n/'), ' ', $sayilacak_metin); $sayilacak_metin=trim($sayilacak_metin); $parca = explode(" ", $sayilacak_metin); $sonuc=count(array_filter($parca));
Это сложная работа, в которой вы не должны пытаться самостоятельно.
Вы должны извлечь текст, который не является частью тегов / комментариев, и не является дочерним элементом для таких элементов, как script
и style
. Для этого вам также понадобится слабый HTML-парсер (например, тот, который реализован в libxml2 и используется в DOMDocument
.
Затем вы должны подделать текст, который представляет свои собственные проблемы. Наконец, вы хотели бы получить какую-то форму , прежде чем приступать к подсчету условий.
Я рекомендую использовать для этого специальные инструменты. Я не использовал ни одного из них, но вы можете попробовать HTMLParser для синтаксического анализа и Lucene для токенизации / генерации (цель Lucene – это поиск текста , но эти операции необходимы для построения индекса).