J'ai besoin d'un script PHP qui prend une URL d'une page Web puis échelle combien de fois un mot est mentionné.
Il s'agit d'une page HTML générique: fort> p> donc la sortie être une table comme celle-ci: p> C'est quelque chose comme les robots de recherche font quand ils surfent sur le Web, donc toute idée de la façon de commencer, voire mieux, faire Vous avez un script PHP qui le fait déjà? P> p>
5 Réponses :
La ligne ci-dessous effectuera un nombre de mots insensibles de cas après avoir désentré toutes les balises HTML de votre chaîne.
Exemple en direct strong> p> pour saisir le code source d'une page que vous pouvez utiliser CURL strong> ou file_get_contents () strong> p> de l'intérieur: p>
1 code> renvoie un tableau contenant tous les mots trouvés à l'intérieur de la chaîne. LI>
Eh bien ouais, mais comment "Bout script code> et
style code> tags?
@YI JIANG - Si vous voulez traiter avec ceux-ci séparément, de nombreux analyseurs HTML existent déjà. Il ne sert à rien de réécrire, car ils sont des bêtes difficiles et compliquées.
Le code précédent est un point où commence. La prochaine étape consiste à supprimer des balises HTML avec les expressions régulières. Recherchez des fonctions EREG et EREGI. Certaines autres astuces sont nécessaires pour les étiquettes de style et de script (vous devez supprimer le contenu) Les points et les virgules doivent être enlevés aussi ... p>
EREG CODE> a été obsolète et, pour commencer, les regexes ne sont pas un outil adéquat pour analyser HTML arbitraire.
Comment l'expression régulière peut-elle être obsolète si elles existent de Perl O.O?
Les réponses ne sont pas toujours répertoriées dans l'ordre chronologique. SO Code précédent code> n'est pas très utile. Un lien URL (chaque réponse a une référence unique) ou une référence auteur est meilleure.
Les expressions régulières n'ont pas été obsolètes, seule l'extension Ereg. Utilisez PCRE à la place (la famille PREG _ code> Fonction).
Le script ci-dessous lira le contenu de l'URL distante, supprimez les balises HTML et comptera les occurrences de chaque mot unique dans celui-ci.
CAVEAT: dans votre sortie attendue, "Ceci" a une valeur de 2, mais Le ci-dessous est sensible à la casse, donc "ceci" et "ceci" sont enregistrés comme des mots distincts. Vous COUDL convertissez la chaîne d'entrée entière en minuscules avant le traitement si le boîtier d'origine n'est pas significatif à vos fonctions. P>
En outre, comme seuls une bande de base est exécutée sur l'entrée, des étiquettes de forme mal formée ne seront pas. supprimé, donc l'hypothèse est que votre source HTML est valide. p>
genichtml.com strong> p> parseur .php strong>
p> ?> p> Sortie: strong> p> Array
(
[This] => 1
[is] => 2
[the] => 1
[title] => 1
[some] => 1
[description] => 1
[text] => 1
[here] => 1
[this] => 1
[a] => 1
[word] => 1
)
Il s'agit d'une solution propre mais de style et d'étiquette de script existe toujours. Que toute la tête de la page doit être supprimée.
Si vous utilisez le code HTML non valide non valide, vous pouvez être analysé;) La ponctuation est toujours un problème
Veuillez ne pas analyser HTML avec des expressions régulières.
BTW, Strip_Tags () (que vous utilisez) Supprime déjà des commentaires HTML multi-lignes et CDATA - CODEPAD.ORG/GPDDEN0T php.net/manual/fr/funcund.strip-tags.php.
Ceci est un travail complexe que vous ne devriez pas tenter votre propre. p>
Vous devez extraire du texte qui ne fait pas partie des balises / commentaires et n'est pas un enfant pour des éléments tels que Ensuite, vous devez Tokenize Le texte, qui présente ses propres défis. Enfin, vous vous êtes intéressé par une forme de stemming avant de procéder à compter les termes. p>
Je vous recommande d'utiliser des outils spécialisés pour cela. Je n'ai utilisé aucun de ceux-ci, mais vous pouvez essayer HTMLParser pour analyse et Lucene pour la tokénisation / stemming (le but de Lucene est Récupération de texte , mais ces opérations sont nécessaires pour la construction de l'index). P> script code> et
style code>. Pour cela, vous aurez également besoin d'un analyseur LAX HTML (comme celui implémenté dans LibXML2 et utilisé dans
Domdocument Code>. P>
Un travail complexe? Le code Conroyp fonctionne bien et fait une grande partie de ce que vous avez énuméré. HTML a une syntaxe très régulière
@Charlie Il y a tellement de choses qui manquent ... Traitement des codages qui ne sont pas ASCII, une manipulation correcte de HTML (je pourrais facilement construire un document HTML avec une transcription biblique qui ne lui donnerait aucun mot pour son code), un bon Tokenizer ( Str_Word_Count CODE> est très basique et ne gère que ASCII), une timbolique, ...
Une timmer? Fist Pourquoi ajouter une timmer qui ne pourra pas trouver les racines de toutes les langues? (Quel est le but? La question initiale a demandé un simple analyseur HTML, pas un analyseur de langue)
Vous pouvez Trouver Stemmers pour plusieurs langues. L'OP ne dit pas qu'il veut stemming, mais il est légitime de supposer qu'il veut, espèce, car il y a déjà une forme de normalisation à terme dans sa question ("ceci" et "ceci" sont comptés comme les mêmes). Et je suppose que vous concédez les autres points ...
Oui, mes doutes sont toujours sur la timmer. Vous l'italien sur la liste que vous avez signalé ne correspond pas correctement à 30% des mots italiens et le vocabulaire qu'il contient n'est que 1% des mots italiens (je ne plaisante pas). Martin Porter a écrit un algorithme bien pour l'anglais (peut-être) mais pas bon pour d'autres langues plus complexes.
C'est mon code pour compter des mots contenant des balises HTML: