J'aimerais ouvrir une page Web avec Nokogiri et extraire tous les mots qu'un utilisateur voit lorsqu'il se rendit dans la page dans un navigateur et analysez la fréquence des mots. P>
Quel est le moyen le plus simple d'obtenir tous les mots lisibles à partir d'un document HTML avec Nokogiri? L'extrait de code idéal prendrait une page HTML (en tant que fichier, par exemple) et donner une maquette de mots individuels provenant de tous types d'éléments lisibles. P>
(pas besoin de s'inquiéter de JavaScript ou de CSS Cache des éléments en cachet et de cacher des mots; tout simplement tous les mots conçus pour l'affichage.) p>
3 Réponses :
Si vous voulez vraiment faire cela avec Nokogiri (et vous pouvez simplement utiliser Regex pour désigner des balises), vous devriez alors: P>
Vous voulez le Nokogiri :: XML :: Noeud # inner_text code>
Méthode:
# Find the most frequent words require 'pp' def frequencies(words) Hash[ words.group_by(&:downcase).map{ |word,instances| [word,instances.length] }.sort_by(&:last).reverse ] end pp frequencies(words) #=> {"nokogiri"=>34, #=> "a"=>27, #=> "html"=>18, #=> "function"=>17, #=> "s"=>13, #=> "var"=>13, #=> "b"=>12, #=> "c"=>11, #=> ... # Hrm...let's drop the javascript code out of our words html.css('script').remove words = html.at('body').inner_text.scan(/\w+/) pp frequencies(words) #=> {"nokogiri"=>36, #=> "words"=>18, #=> "html"=>17, #=> "text"=>13, #=> "with"=>12, #=> "a"=>12, #=> "the"=>11, #=> "and"=>11, #=> ...
Vous semblez savoir ce que vous faites - aucune idée de savoir comment obtenir le nombre de lignes dans le texte? Je pars un corps poème avec des balises
et de
.
@Kevin Posez une question (pas comme un commentaire à une réponse) et vous aurez probablement la solution dont vous avez besoin. Il existe de multiples façons, mais cela dépend de votre entrée et de vos désirs exacts.
bug dans la réponse choisie: strong>
html.at ('Corps'). inner_text - rejoindre tout le texte de tous les nœuds - sans espaces forts>. Par exemple, document contenant: p> ceci p> texte p> corps> code> p> aboutira à "Theutext" p> mieux: utiliser Cette réponse p>
Le FYI Notez que les mots les plus intéressants ne sont souvent pas ceux qui apparaissent le plus. Vous devriez jeter un oeil à TF-IDF: goo.gl/m0Ie