9
votes

Obtenir du texte d'une URL dans ASP.NET

Je cherche un moyen fiable d'extraire du texte étant donné l'adresse Web, dans ASP.NET/C#. Quelqu'un peut-il me diriger la bonne direction?

En outre, l'adresse Web pourrait être un site d'information qui pourrait avoir beaucoup d'annonces et de menus, etc. J'ai besoin d'une manière intelligente d'extraire uniquement le contenu pertinent. Je ne sais pas comment cela pourrait être fait comme comment puis-je définir quelle pertinence est?

Devrais-je peut-être lire depuis un flux RSS? Toute pensée à ce sujet?

éditer J'ai ajouté une prime. Je cherche à extraire le texte "pertinent" d'une URL. De "pertinent", je veux dire, il devrait exclure le texte des annonces (et d'autres informations non pertinentes). L'entrée sera similaire à celle d'un site d'information. J'ai besoin d'extraire uniquement les informations de la nouvelle et de vous débarrasser du texte étranger


1 commentaires

HTML Agility Pack aide ici?


6 Réponses :


-4
votes

Une fois que vous avez le code HTML de pages Web, vous utilisez des expressions régulières


1 commentaires

L'analyse HTML avec regex est impossible. Ne perds pas ton temps. Stackoverflow.com/Questtions/1732348/...



0
votes

Pour obtenir le marquage HTML réel, essayez l'objet WebClient. Quelque chose comme ça vous obtiendra le balisage: xxx

puis comme ISC-Fausto dit, vous pouvez utiliser des expressions régulières pour analyser la sortie selon vos besoins.


5 commentaires

Toute URL doit être prise en charge par cette application. Étant donné que les pages Web ne suivent pas le même motif, je ne suis pas sûr que si cela est même possible que l'analyseur soit intelligent pour éliminer les données "non pertinentes"


Essayer d'utiliser des expressions régulières pour analyser HTML peut être vraiment velu et frustrant. Utilisez le pack d'agilité HTML si vous le pouvez - c'est un analyseur DOM, qui est vraiment ce dont vous avez besoin pour extraire le texte de HTML.


D'où vient le pack d'agilité? J'utilise le code de Steve pour saisir le code HTML et l'exécuter via le paquet pour éliminer les balises HTML et le contenu non pertinent et obtenir du texte brut? Existe-t-il des méthodes intégrées dans le pack d'agilité pour le faire? Merci


Je suppose que je suis confus comment le pack d'agilité s'inscrit. Une fois que j'ai le HTML de votre code, comment puis-je utiliser le pack pour obtenir le contenu du texte "pertinent"?


-1 parce que vous n'êtes pas en utilisant et -1 pour même de penser à l'analyse HTML avec regex



3
votes

Je pense que vous avez besoin d'un analyseur HTML comme HTMLagilityPack ou que vous pouvez utiliser le nouveau né Bén .. YQL, son nouvel outil Développer par Yahoo Sa syntaxe est comme SQL et vous avez besoin d'une petite connaissance de XPath ...

http://developer.yahoo.com/yql/

Merci


0 commentaires

2
votes

1 commentaires

Ravi de voir du VB ici. Je noterai cependant qu'il y a une balise C # dans la question. Vous auriez probablement plus de votes si vous avez fourni les deux.



4
votes

Une fois que vous avez téléchargé la page, vous avez démarré à l'aide d'une bibliothèque comme HTML Agility Pack pour analyser HTML, votre travail commence :)

L'écran grattage est divisé en deux parties.

Premier le WebCrawler (beaucoup d'informations à ce sujet sur le Web et le code simple fourni ici avec WebClient par d'autres réponses). Le chronomètre doit traverser des liens et télécharger des pages. Si vous téléchargez de nombreuses pages et que vous avez l'URL de démarrage, vous pouvez rouler votre propre ou utiliser un existant. Découvrez Wikipedia pour une liste de webcrawlers / araignées open source.

La deuxième partie consiste à analyser le code HTML et ne tirez que le texte que vous souhaitez et omettez n'importe quel bruit (en-têtes, bannières, pieds de page, etc.). Il suffit de traverser le DOM est facile avec les bibliothèques existantes, déterminant quoi faire avec ce que vous analysez la partie difficile.

J'ai un peu écrit à ce sujet avant à un autre Donc, question et cela pourrait vous donner quelques idées comment pratiquer manuellement le contenu que vous voulez. De mon expérience, il n'y a pas de moyen à 100% de trouver le contenu principal d'une page, et plus souvent que non, vous devez lui donner manuellement certains pointeurs. La partie difficile est que si la disposition HTML de la page change, votre grattoir d'écran commence à échouer.

Vous pouvez appliquer des statistiques et comparer le code HTML de plusieurs pages afin de déduire où les annonces, les menus etc. sont, afin d'éliminer ceux-ci.

Puisque vous mentionnez des sites de presse, deux autres approches devraient être plus faciles à appliquer sur ces sites par rapport à l'analyse du texte à partir du HTML d'origine.

  1. Vérifiez si la page a une URL d'impression. Par exemple. Un lien sur CNN a une URL d'impression équivalente qui est beaucoup plus facile à analyser.
  2. Vérifiez si la page dispose d'une représentation RSS et choisissez plutôt le texte du flux RSS. Si l'aliment n'a pas tout le contenu, il devrait vous donner suffisamment de texte pour localiser le texte dans la page HTML complète.

    Découvrez également Le moyen facile d'extraire un texte utile à partir de HTML arbitraire pour une contribution à la création d'un analyseur plus général. Le code est en python mais vous devriez être capable de le convertir sans trop de problèmes.


0 commentaires

0
votes

Les techniques de résumation de texte sont ce que vous êtes probablement après. Mais comme une heuristique approximative, vous pouvez le faire avec des étapes relativement simples tant que vous ne comptez pas sur 100% de résultats parfaits tout le temps.

Tant que vous n'avez pas besoin de prendre en charge des systèmes d'écriture qui ne disposent pas d'espaces entre les mots (chinois, japonais), vous pouvez obtenir de très bons résultats en recherchant les premiers couple de séquences de mots consécutifs avec un seuil arbitraire que vous passerez quelques jours à régler. (Chinois et Japonais nécessiteraient un algorithme d'identification de pause de mots raisonnable en plus de cette heuristique).

Je commencerais avec un analyseur HTML (HTML Agility Pack dans DotNet, ou quelque chose du genre à la beauté de Ruby's Nokogiri ou Python de Python si vous souhaitez expérimenter avec les algorithmes dans un environnement plus interactif avant de vous engager dans votre solution C #).

Pour réduire l'espace de recherche, séquences de liens avec peu ou pas de texte environnant en utilisant les fonctionnalités de votre analyseur HTML. Cela devrait éliminer la plupart des panneaux de navigation et certains types d'annonces. Vous pouvez également étendre ceci pour rechercher des liens qui ont des mots après eux mais aucune ponctuation; Cela éliminerait les liens descriptifs.

Si vous commencez à voir des courses de texte suivies de "". ou "," avec dire, 5 mots ou plus (que vous pouvez essayer de régler plus tard), vous commenceriez à marquer cela comme une phrase potentielle ou un fragment de phrase. Lorsque vous trouvez plusieurs courses d'affilée, cela a de très bonnes chances d'être la partie la plus importante de la page. Vous pouvez marquer du texte avec des balises

autour de lui un peu plus haut. Une fois que vous avez une bonne quantité de ces types de séquences, les chances sont plutôt bonnes que vous avez un "contenu" plutôt que de la mise en page Chrome.

Ce n'est pas parfait et vous devrez peut-être ajouter un mécanisme pour modifier la heuristique basée sur des structures de page problématiques que vous numérisez régulièrement. Mais si vous construisez quelque chose sur la base de cette approche, il devrait fournir des résultats assez raisonnables pour 80% ou plus de votre contenu.

Si vous trouvez ce type de méthode inadéquate, vous voudrez peut-être examiner la probabilité bayésienne ou les modèles cachés de Markov afin d'améliorer les résultats.


0 commentaires