2017-02-02 1 views
1

Existe-t-il un moyen d'ajouter des espaces à chaque élément contenant du texte? Pour cet exemple:Ajout d'espaces aux éléments de texte

movie <- read_html("http://www.imdb.com/title/tt1490017/") 
cast <- html_nodes(movie, "#titleCast span.itemprop") 
cast %>% html_structure() 
[[1]] 
<span.itemprop [itemprop]> 
    {text} 

[[2]] 
<span.itemprop [itemprop]> 
    {text} 

Je voudrais ajouter un espace de fin à chaque élément de texte avant à l'aide html_text(). J'ai un autre cas d'utilisation où je veux utiliser html_text() plus haut dans la hiérarchie du document. Le résultat est que plusieurs textes sont combinés dans un élément vectoriel. Cela rend impossible de déduire le début et la fin des parties correspondantes.

Répondre

4

Voulez-vous dire quelque chose comme ça?

doc <- minimal_html("Hello<p>World</p>") 
doc %>% html_text # HelloWorld 
doc %>% html_text_collapse(" ") # Hello World 

Si alors voici le code:

require(stringi) 
require(rvest) 

html_text_collapse <- function(x, collapse = " ", trim = TRUE){ 
    text <- html_text(html_nodes(x, xpath = ".//text()[normalize-space()]")) 
    if (trim) { 
    text <- stri_trim_both(text) 
    } 
    paste(text, collapse = collapse) 
} 
+0

Cela fonctionne parfaitement, je vous remercie beaucoup! :) Pourriez-vous m'expliquer brièvement comment fonctionne ce morceau de code? Je ne suis pas familier avec '' '' 'UseMethod()' '' '. – methodds

+1

@methodds: Simplement simplifié la fonction. Jetez un oeil ici sur la façon dont l'ancien a travaillé: http://adv-r.had.co.nz/OO-essentials.html#s3 Je me suis rendu compte que j'ai codé cela pour une utilisation particulière de la mienne. Ce qui précède devrait être bon pour la plupart des cas d'utilisation ... – Rentrop

+0

Merci c'est encore mieux dans quelque chose que je comprends. – methodds