Переход между 2.x и 3.x не слишком экстремален, но он меняет некоторые вещи. raw_input теперь просто вводится, если вы хотите использовать старый вход, просто выполните:
eval(input())
Так что просто забудьте raw:)
Это может быть достигнуто просто с помощью регулярных выражений и семейства grep:
cleanFun <- function(htmlString) {
return(gsub("<.*?>", "", htmlString))
}
Это также будет работать с несколькими тегами html в одной строке!
Во-первых, ваша строка темы вводит в заблуждение; в строке, которую вы разместили, нет обратных косых черт. Вы стали жертвой одного из классических промахов: не так плохо, как участвовать в наземной войне в Азии, но все равно. Вы ошибаетесь в использовании R \
для обозначения экранированных символов для литеральных обратных косых черт. В этом случае \"
означает знак двойной кавычки, а не два буквальных символа \
и "
. Вы можете использовать cat
, чтобы увидеть, что на самом деле будет выглядеть строка, если бы экранированные символы обрабатывались буквально.
Во-вторых, вы используете регулярные выражения для синтаксического анализа HTML. (Они не отображаются в вашем коде, но они используются под капотом в str_locate_all
и str_replace_all
.) Это еще один из классических промахов; см. здесь для более подробной информации.
В-третьих, вы должны упомянуть в своем посте, что используете пакет stringr
, но это лишь незначительная ошибка при сравнении.
xpathSapply(doc, 'somepath', xmlValue)
.
– user1609452
21 June 2013 в 06:55
HTML + regex = bad
избегает принятия решений. Иногда регулярное выражение является подходящим. Мы не знаем формат данных или источник. Это голосование было проголосовано 2 раза, но на самом деле не дает OP ответа.
– Tyler Rinker
21 June 2013 в 14:51
Может быть проще с sub или gsub?
> test <- "junk junk<a href=\"/wiki/abstraction_(mathematics)\" title=\"abstraction (mathematics)\"> junk junk"
> gsub(pattern = "<.*>", replacement = "", x = test)
[1] "junk junk junk junk"
<
на последний вид >
. поэтому, когда есть несколько тегов html, это может быть проблемой
– joel.wilson
16 February 2017 в 20:27
Другой подход, использующий tm.plugin.webmining
, который внутренне использует XML
.
> library(tm.plugin.webmining)
> extractHTMLStrip("junk junk<a href=\"/wiki/abstraction_(mathematics)\" title=\"abstraction (mathematics)\"> junk junk")
[1] "junk junk junk junk"
Подход с использованием пакета qdap:
library(qdap)
bracketX(test, "angle")
## > bracketX(test, "angle")
## [1] "junk junk junk junk"
bracketX
очень полезен для гораздо более общего класса проблем. Еще один для инструментария.
– user1609452
21 June 2013 в 18:11
"<.*?>" in the
htmlString 'и заменяет его пустой строкой""
и возвращает результат. Для сопоставления шаблонов вам нужно изучить регулярные выражения. Единственная немного сложная часть -".*?"
,?
делает ее не жадной, поэтому, если у вас есть несколько тегов, например, & quot; & lt; a & gt; мусор & lt; / a & gt; он будет соответствовать & quot; & lt; a & gt; и "& lt; / a & gt;" а не целую строку. – Scott Ritchie 21 June 2013 в 05:13