Comptage de mots sur une page web html à l'aide de php
J'ai besoin d'un script PHP qui prend l'URL d'une page web, puis les échos nombre de fois qu'un mot est mentionné.
Exemple
Ce générique est une page HTML:
<html>
<body>
<h1> This is the title </h1>
<p> some description text here, <b>this</b> is a word. </p>
</body>
</html>
Ce sera le script PHP:
<?php
htmlurl="generichtml.com";
the script here
echo(result);
?>
De sorte que la sortie est un tableau comme ceci:
WORDS Mentions
This 2
is 2
the 1
title 1
some 1
description 1
text 1
a 1
word 1
C'est quelque chose comme les robots de recherche font lorsqu'ils naviguent sur le web, alors, une idée de comment commencer, ou encore mieux, faire vous avez un script PHP qui fait déjà cela?
OriginalL'auteur DomingoSL | 2010-08-15
Vous devez vous connecter pour publier un commentaire.
La ligne ci-dessous va faire un casse word count après décapage de toutes les balises HTML à partir de votre chaîne.
Live
Pour obtenir le code source d'une page, vous pouvez utiliser cURL ou file_get_contents()
À partir à l'intérieur:
1
retourne un tableau contenant tous les mots trouvés à l'intérieur de la chaîne.maintenant, il ne
+1, je voudrais ajouter une
strtolower()
là aussi.Merci, bonne idée.
Live exemple avec votre exemple de code - codepad.org/7YJGYBVt
OriginalL'auteur Peter Ajtai
Ci-dessous le script va lire le contenu de l'url distante, supprimer les balises html, et de compter les occurrences de chaque mot unique qui y est.
Mise en garde: lors De votre sortie attendue, "Cela a" d'une valeur de 2, mais le dessous est sensible à la casse, donc, à la fois "ceci" et "Cela" sont comptabilisés comme des mots séparés. Vous coudl convertir l'ensemble de la chaîne d'entrée en minuscules avant le traitement si l'affaire n'est pas significative pour vos fins.
En outre, comme seule une base strip_tags est exécuté sur l'entrée, mal formés balises ne seront pas supprimés, de sorte que l'hypothèse est que votre source html est valide.
Edit: Charlie points dans les commentaires que des choses comme la
head
section sera toujours compté. Avec l'aide d'une fonction définie dans la les notes de l'utilisateur de la fonction strip_tags, ces sont maintenant pris en charge.generichtml.com
parser.php
?>
De sortie:
Si vous utilisez le regExpressions pas un code html valide pourrait être analysé 😉 la Ponctuation est toujours un problème
S'il vous plaît ne pas analyser HTML avec des expressions régulières.
btw, strip_tags () () qui supprime déjà en ligne multi commentaires HTML et CDATA - codepad.org/gpdden0T php.net/manual/en/function.strip-tags.php .
OriginalL'auteur ConroyP
Le code précédent est un point sur lequel démarrer. La prochaine étape est de supprimer les balises html avec les expressions régulières. Recherchez ereg et eregi fonctions. Quelques autres astuces sont nécessaires pour le style et les balises de script (vous devez supprimer le contenu)
Les Points et les virgules doivent être retirés trop...
ereg
's été déprécié, et, pour commencer, regexes ne sont pas un outil adéquat pour l'analyse de code HTML arbitraire.Comment peut-expression régulière obsolète si ils existent depuis perl O. O?
Les réponses ne sont pas toujours répertoriés dans l'ordre chronologique, donc
previous code
n'est pas très utile. Un lien url (chaque réponse unique) ou la référence à un auteur, c'est mieux.Les expressions régulières n'ont pas été abandonné, seul le ereg extension. Utilisation PCRE (le
preg_
fonction de la famille).Ah ok 🙂 j'ai mal compris
OriginalL'auteur Charlie
C'est mon code pour le comptage des mots contenant des balises html:
OriginalL'auteur Adil YILDIZ
C'est un travail complexe que vous ne devriez pas essayer sur votre propre.
Vous devez extraire le texte qui ne fait pas partie de tags/commentaires et n'est pas un enfant pour des éléments tels que
script
etstyle
. Pour cela, vous aurez également besoin d'un laxisme de l'analyseur HTML (comme celui mis en œuvre dans libxml2 et utilisé dansDOMDocument
.Ensuite, vous avez à marquer le texte, qui présente ses propres défis. Enfin, vous seriez intéressé par une certaine forme de découlant avant de procéder au comptage des termes.
Je vous recommande d'utiliser des outils spécialisés pour cela. Je n'ai pas utilisé l'un de ces, mais vous pouvez essayer HTMLParser pour l'analyse et l' Lucene pour la segmentation/lemmatisation le but de Lucene est Récupération De Texte, mais ces opérations sont nécessaires pour la construction de l'index).
Il y a de nombreuses choses qui sont en manque... de Traiter avec des encodages non ASCII, une manipulation correcte de HTML (j'ai pu facilement créer un document HTML avec une bible de transcription qui lui donnerait pas de mots que ce soit pour son code), un bon générateur de jetons (
str_word_count
est très basique et ne gère que l'ASCII), un analyseur morphologique, ...Un analyseur morphologique? Poing pourquoi ajouter un analyseur morphologique qui ne seront pas en mesure de trouver les racines de toutes les langues? (quel est le but? La question initiale posée par un simple analyseur HTML, pas une langue de l'analyseur)
Vous pouvez rechercher conjugaison pour plusieurs langues. L'OP retrouver pas dire qu'il veux de radical, mais il est légitime de supposer qu'il veut, esp, puisqu'il y a déjà une forme de terme de normalisation dans sa question ("Ceci" et "cela" sont comptés comme étant la même). Et je suppose que vous admettez les autres points...
Oui, mes doutes sont encore sur l'analyseur morphologique. Vous l'italien sur la liste, vous signalé ne pas correspondre correctement à 30% de l'italien mots et le vocabulaire qu'il contient est juste le 1% de mots en italien (je ne plaisante pas). Martin Portier a écrit un algorithme bon pour l'anglais (peut-être), mais pas bon pour d'autres plus complexes langues.
OriginalL'auteur Artefacto