Question

Quel travail a été effectué, le cas échéant, pour déterminer automatiquement les données les plus importantes dans un document HTML? Par exemple, pensez à votre site Web standard de type actualités / blog / magazine, contenant la navigation (avec éventuellement des sous-menus), des annonces, des commentaires et le prix - notre article / blog / news-body.

Comment déterminez-vous quelles informations sur un journal / blog / magazine sont les données principales de manière automatisée?

Remarque: Idéalement, la méthode fonctionnerait avec un balisage bien formé et un balisage terrible. Si quelqu'un utilise des balises de paragraphe pour créer des paragraphes ou une série de sauts.

Était-ce utile?

La solution

La lisibilité fait exactement ce que vous voulez.

Il est open source et publié sur Google Code .

UPDATE: je vois ( via HN ) que quelqu'un a utilisé Readability to < a href = "http://andrewtrusty.appspot.com/readability/" rel = "nofollow noreferrer"> Mangle les flux RSS dans un format plus utile, de manière automatique .

Autres conseils

  

Pensez à votre site Web standard de style actualités / blog / magazine, contenant la navigation (avec éventuellement des sous-menus), des annonces, des commentaires et le prix - notre article / blog / news-body.

     

Comment déterminez-vous quelles informations sur un journal / blog / magazine sont les données principales de manière automatisée?

Je voudrais probablement essayer quelque chose comme ça:

  • URL ouverte
  • lire tous les liens vers le même site Web à partir de cette page
  • suivez tous les liens et créez une arborescence DOM pour chaque URL (fichier HTML)
  • ceci devrait vous aider à créer des contenus redondants (modèles inclus, etc.)
  • compare les arbres DOM de tous les documents sur le même site (parcours dans l'arbre)
  • supprimez tous les nœuds redondants (répétez-les, balises de navigation, annonces, etc.)
  • essayez d'identifier les nœuds similaires et supprimez-les si possible
  • recherchez les plus grands blocs de texte uniques qui ne figurent pas dans les autres DOM sur ce site Web (c'est-à-dire un contenu unique)
  • ajouter en tant que candidat pour un traitement ultérieur

Cette approche semble prometteuse, car elle serait assez simple à réaliser, tout en offrant un bon potentiel d’adaptation, même pour les pages Web 2.0 complexes faisant un usage excessif des modèles, car elle identifierait des nœuds HTML similaires dans entre toutes les pages du même site Web.

Cela pourrait probablement être encore amélioré en simplifiant l'utilisation d'un système de scoring pour garder une trace des nœuds DOM précédemment identifiés comme contenant un contenu unique, afin que ces nœuds soient priorisés pour les autres pages.

Parfois, une section de média CSS est définie comme "Imprimer". Son utilisation est destinée aux liens "Cliquez ici pour imprimer cette page". Habituellement, les gens l'utilisent pour enlever beaucoup de duvet et ne laisser que la viande de l'information.

http://www.w3.org/TR/CSS2/media.html

Je voudrais essayer de lire ce style, puis de gratter tout ce qui reste visible.

Vous pouvez utiliser des machines à vecteurs de support pour effectuer la classification de texte. Une idée est de diviser les pages en différentes sections (considérons chaque élément structurel comme si un div est un document), d’en rassembler certaines propriétés et de le convertir en vecteur. (Comme d'autres personnes l'ont suggéré, il pourrait s'agir du nombre de mots, du nombre de liens, du nombre d'images, mieux ce sera.)

Commencez par commencer avec un grand ensemble de documents (100-1000) que vous avez déjà choisis et dont la partie est la partie principale. Utilisez ensuite cet ensemble pour former votre SVM.

Et pour chaque nouveau document, il vous suffit de le convertir en vecteur et de le transmettre à SVM.

Ce modèle vectoriel est en fait très utile pour la classification de texte et vous n'avez pas nécessairement besoin d'utiliser un SVM. Vous pouvez également utiliser un modèle bayésien plus simple.

Et si cela vous intéresse, vous pouvez trouver plus de détails dans Introduction à la recherche d'informations . (Disponible gratuitement en ligne)

Je pense que le moyen le plus simple serait de rechercher le bloc de texte le plus volumineux sans balisage. Puis, une fois trouvé, déterminez-en les limites et extrayez-les. Vous voudrez probablement exclure certaines balises de " not markup " comme des liens et des images, en fonction de ce que vous ciblez. Si cela a une interface, incluez peut-être une liste de balises à exclure de la recherche.

Vous pouvez également rechercher le niveau le plus bas dans l'arborescence DOM et déterminer lequel de ces éléments est le plus grand, mais cela ne fonctionnerait pas bien sur les pages mal écrites, car l'arborescence dom est souvent endommagée sur ces pages. Si vous finissez par utiliser ceci, je trouverais un moyen de voir si le navigateur est passé en mode quirks avant de l'essayer.

Vous pouvez également utiliser plusieurs de ces contrôles, puis définir une métrique pour déterminer laquelle est la meilleure. Par exemple, essayez quand même d’utiliser ma deuxième option ci-dessus, mais donnez à son résultat un "quotient" inférieur. si le navigateur entre normalement en mode quirks. Cela aurait évidemment un impact sur les performances.

Je pense qu'un algorithme très efficace pour cela pourrait être, "Quelle DIV a le plus de texte dans elle qui contient peu de liens?"

Il est rare que les annonces contiennent plus de deux ou trois phrases de texte. Regardez le côté droit de cette page, par exemple.

La zone de contenu est presque toujours la zone dont la largeur est la plus grande sur la page.

Je commencerais probablement par le titre et tout ce qui se trouve dans une balise Head, puis je filtrerais les balises de titre dans l'ordre (c.-à-d. h1, h2, h3, etc.) du haut jusqu'en bas. Selon son style, il peut être prudent de supposer qu'un titre de page possède un identifiant ou une classe unique.

Je chercherais des phrases avec ponctuation. Les menus, les en-têtes, les pieds de page, etc. contiennent généralement des mots séparés, mais pas des phrases se terminant par des virgules et se terminant par un point ou une ponctuation équivalente.

Vous pouvez rechercher le premier et le dernier élément contenant des phrases avec une ponctuation et tout prendre entre les deux. Les en-têtes constituent un cas particulier, car ils ne comportent généralement pas non plus de ponctuation, mais vous pouvez généralement les reconnaître en tant qu'éléments Hn immédiatement avant les phrases.

Bien que ce ne soit évidemment pas la réponse , je suppose que le contenu important est situé près du centre de la page stylée et consiste généralement en plusieurs blocs interrompus par des titres, etc. La structure elle-même peut aussi être un cadeau dans le balisage.

Une différence entre articles / articles / discussions serait un bon filtre pour savoir quel contenu distingue une page particulière (évidemment, il faudrait l'augmenter pour filtrer les merdes aléatoires telles que les annonces, les citations du jour ou bannières). La structure du contenu peut être très similaire pour plusieurs pages, alors ne vous fiez pas trop aux différences de structure.

Instapaper fait du bon travail avec cela. Vous voudrez peut-être consulter le blog de Marco Arment pour obtenir des conseils sur la manière dont il l'a fait.

Aujourd'hui, la plupart des sites d'informations / blogs utilisent une plateforme de blogs. Je créerais donc un ensemble de règles selon lesquelles je chercherais du contenu. Par exemple, Wordpress et Google Blogspot sont deux des plateformes de blogs les plus populaires.

Les publications Wordpress sont marquées par:

<div class="entry">
    ...
</div>

Les articles de blogspot sont marqués par:

<div class="post-body">
    ...
</div>

Si la recherche par classe css échoue, vous pouvez vous tourner vers les autres solutions, en identifiant le bloc de texte le plus important, etc.

La lisibilité n'étant plus disponible:

  • Si le résultat vous intéresse uniquement, vous utilisez le successeur de Readability, Mercury . un service Web.
  • Si un code vous intéresse, comment procéder et si vous préférez JavaScript, vous trouverez la lisibilité de Mozilla. js , qui est utilisé pour la vue lecteur de Firefox.
  • Si vous préférez Java, consultez Crux , qui fonctionne également très bien. .
  • Ou si Kotlin est votre langue, vous pouvez consulter Readability4J , un port de Readability.js ci-dessus.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top