Подсчет слов на веб-странице 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, который уже делает это?

9
задан Timwi 15 August 2010 в 00:16
поделиться

4 ответа

Одна строка ниже сделает подсчет слов без учета регистра после удаления всех 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. Используйте strtolower() чтобы сделать все слова в нижнем регистре.
  2. Снимите HTML-теги с помощью strip_tags()
  3. Создайте массив использованных слов с помощью str_word_count(). Аргумент 1 возвращает массив, содержащий все слова, найденные в строке.
  4. Используйте array_count_values() для определения слов, используемых более одного раза, подсчитывая появление каждого значения в массиве слов.
  5. Используйте print_r() для отображения результатов.
25
ответ дан 4 December 2019 в 07:33
поделиться

Приведенный ниже сценарий будет читать содержимое удаленного 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
)
5
ответ дан 4 December 2019 в 07:33
поделиться

Предыдущий код - это точка начала. Следующим шагом будет удаление тегов html с регулярными выражениями. Ищите функции ereg и eregi. Для тегов стилей и скриптов требуются другие хитрости (содержимое необходимо удалить) Очки и запятые тоже нужно убрать ...

0
ответ дан 4 December 2019 в 07:33
поделиться

Это сложная работа, которую не следует выполнять в одиночку.

Вы должны извлечь текст, который не является частью тегов / комментариев и не является дочерним для таких элементов, как скрипт и стиль . Для этого вам также понадобится слабый анализатор HTML (например, реализованный в libxml2 и используемый в DOMDocument .

Затем вы должны токенизировать текст, который представляет его собственные проблемы. Наконец, вы бы заинтересовались некоторой формой стемминга , прежде чем переходить к подсчету терминов.

Я рекомендую вам использовать для этого специальные инструменты. Я не использовал ни один из них, но вы можно попробовать HTMLParser для синтаксического анализа и Lucene для токенизации / стемминга (цель Lucene - Text Retrieval , но эти операции необходимы для построения индекса).

-1
ответ дан 4 December 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: