Подсчет слов на веб-странице html с помощью php
мне нужен 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 скрипт, который уже делает это?
5 ответов
одна строка ниже будет делать нечувствительное к регистру количество слов после удаления всех тегов 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/');
изнутри:
- использовать strtolower() чтобы сделать все ниже случай.
- Strip HTML теги с помощью strip_tags ()
- создать массив слов, используя str_word_count (). Аргумент
1
возвращает массив, содержащий все слова, входящие в строку. - использовать array_count_values () захватить слова, используемые более одного раза, считая при наступлении каждого значения в массиве слов.
- использовать print_r () для отображения результатов.
приведенный ниже скрипт прочитает содержимое удаленного url-адреса, удалит теги html и подсчитает вхождения каждого уникального слова в нем.
предостережение: в вашем ожидаемом выходе "это" имеет значение 2, но ниже чувствительно к регистру, поэтому как "это", так и "это" записываются как отдельные слова. Вы можете преобразовать всю входную строку в нижний регистр перед обработкой, если исходный регистр не имеет значения для ваших целей.
дополнительно, как только основной strip_tags запускается на входе, теги, сформированные mal, не будут удалены, поэтому предполагается, что ваш исходный html действителен.
Edit: Чарли указывает в комментариях, что такие вещи, как 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>
парсер.в 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("/<([^>]*(<|$))/", "<", $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));
- Шаг 1: преобразовать все nbsp в space
- Step2: исправить сломанные теги html (если не исправлена функция striptags будет сломал строку)
- Шаг 3: полоса html теги
- Step4&5&6: очистить скрытые пробелы и новые строки/вкладки
- Step7: обрезать начало и конец строки
- Step8: преобразуйте каждое слово в массив
- Step9:Граф Фильтруют Массив
Это сложная работа, которую вы не должны пытаться самостоятельно.
вы должны извлечь текст, который не является частью тегов / комментариев и не является дочерним для таких элементов, как script
и style
. Для этого Вам также понадобится синтаксический анализатор HTML lax (например, реализованный в libxml2 и используемый в DOMDocument
.
тогда вы должны tokenize текст, который представляет свои собственные проблемы. Наконец, вы заинтересованы в какой-то форме stemming перед переходим к подсчету сроков.
Я рекомендую вам использовать специализированные инструменты для этого. Я не использовал ни один из них, но вы можете попробовать HTMLParser для разбора и введение для токенизации / stemming (цель Люсена Текст Поиска, но эти операции необходимы для построения индекса).