2017-02-02 5 views
1

Есть ли способ добавить пробелы к каждому элементу, содержащему текст? Для этого примера:Добавление пробелов в текстовые элементы

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} 

Я хотел бы добавить завершающие пробельные для каждого элемента текста перед тем использованием html_text(). У меня есть другой вариант использования, когда я хочу использовать html_text() выше в иерархии документов. В результате несколько текстов объединяются в один векторный элемент. Это делает невозможным вывод о начале и конце соответствующих частей.

ответ

4

Вы имеете в виду что-то вроде этого?

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

Если так вот код:

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

Это прекрасно работает, спасибо так много! :) Не могли бы вы кратко объяснить, как работает этот кусок кода? Я не знаком с '' '' UseMethod() '' ''. – methodds

+1

@methodds: Просто упрощена функция. Посмотрите здесь, как работал старый: http://adv-r.had.co.nz/OO-essentials.html#s3 Я понял, что я закодировал это для моей специальной утилиты. Вышеприведенное должно быть хорошо для большинства случаев ... – Rentrop

+0

Спасибо, что еще лучше, что-то я понимаю. – methodds