Удаление тегов html из строки в R

Я пытаюсь прочитать исходный веб-страницы в R и обработать его как строки. Я'Я пытаюсь убрать абзацы и удалить теги html из текста абзаца. Я'Я сталкиваюсь со следующей проблемой:

Я попытался реализовать функцию для удаления тегов HTML:

cleanFun=function(fullStr)
{
 #find location of tags and citations
 tagLoc=cbind(str_locate_all(fullStr,"")[[1]][,1]);

 #create storage for tag strings
 tagStrings=list()

 #extract and store tag strings
 for(i in 1:dim(tagLoc)[1])
 {
   tagStrings[i]=substr(fullStr,tagLoc[i,1],tagLoc[i,2]);
 }

 #remove tag strings from paragraph
 newStr=fullStr
 for(i in 1:length(tagStrings))
 {
   newStr=str_replace_all(newStr,tagStrings[[i]][1],"")
 }
 return(newStr)
};

Это работает для некоторых тегов, но не для всех тегов, например, где это не получается, следующая строка:

test="junk junk<a href="\"/wiki/abstraction_(mathematics)\"" title="\"abstraction" (mathematics)\"=""> junk junk"
</a>

 Ryan Warnick21 июн. 2013 г., 05:46
Отредактировано, чтобы исправить некоторые ошибки, допущенные при вводе кода.
 alexwhan21 июн. 2013 г., 05:47
Там'Здесь много чего происходит ... Для начала, это R, так что нет;, Вы'в основном ищетgsub и соответствующее регулярное выражение (в данном случае уже здесь ответили:stackoverflow.com/questions/10225690/...). Есть другие проблемы с кодом (dim(tagLoc)[1] не делает то, что ты думаешь, но я нене думаю, чтоСуть вашего вопроса

Ответы на вопрос(7)

Может быть проще с сабом или gsub?

> test  <- "junk junk<a href="\"/wiki/abstraction_(mathematics)\"" title="\"abstraction" (mathematics)\"=""> junk junk"
> gsub(pattern = "<.*>", replacement = "", x = test)
[1] "junk junk junk junk"
</a>
 joel.wilson16 февр. 2017 г., 20:27
1 проблема с этим кодом может быть, он заменяет с первого появления, поэтому, когда есть несколько тегов HTML, то это может быть проблемой

Подход с использованием пакета qdap:

library(qdap)
bracketX(test, "angle")

## > bracketX(test, "angle")
## [1] "junk junk junk junk"
 user160945221 июн. 2013 г., 19:11
Я установил ваш пакет и посмотрел исходный код для различных функций.bracketX очень полезен для гораздо более общего класса проблем. Еще один для панели инструментов.
Решение Вопроса

йства grep:

cleanFun <- function(htmlString) {
  return(gsub("<.*?>", "", htmlString))
}

Это также будет работать с несколькими тегами HTML в одной строке!

 Scott Ritchie06 янв. 2018 г., 04:52
Хорошо яукушу - удаление! = разбор
 Scott Ritchie21 июн. 2013 г., 06:13
В основном то, что он делает, это находит какие-либо экземпляры шаблона"" in the HTMLString»и заменяет его пустой строкой""и возвращает результат. Для сопоставления с образцом вы должны изучить регулярные выражения. Единственная немного сложная часть".*?",? делает его не жадным, поэтому, если у вас есть несколько тегов, например "<a> барахло/ А>» это будет соответствовать "<a>" и "</ А>» вместо всей строки ".
 geotheory06 янв. 2018 г., 03:01
Каждый раз, когда вы пытаетесь разобрать HTML с помощью регулярных выражений, нечестивый ребенок плачет кровью девственниц, а русские хакеры набивают ваше веб-приложение " Отэтот оригинальный ответ.

RegEx соответствует открытым тегам, кроме автономных тегов XHTML

Используйте пакет какXML, Исходный код HTML в разборе его, например,htmlParse и используйте xpaths, чтобы найти нужные вам количества.

ОБНОВИТЬ:

Чтобы ответить на ОП 'вопрос

require(XML)
xData <- htmlParse('yourfile.html')
xpathSApply(xData, 'appropriate xpath', xmlValue)
 user160945221 июн. 2013 г., 07:55
ОП, вероятно, просто хочет использовать.xpathSapply(doc, 'somepath', xmlValue)
 Scott Ritchie21 июн. 2013 г., 07:50
Это применимо в этом случае, хотя? Он невообще не хочет разбирать теги, он хочет их убрать.
 user160945221 июн. 2013 г., 17:03
ФП мало рассказал о том, чего они в конечном итоге хотят. Они предоставили краткий набросок, который выглядит как регулярное выражение, используемое в качестве парсера. Было бы неправильно не сообщать ФП, что это очень часто, если не всегда, плохая идея.
 Tyler Rinker21 июн. 2013 г., 15:51
Ссылка, которую выМы предоставляем это так часто, когда кто-нибудь предлагает регулярное выражение для HTML, но на самом деле это просто правило, а не правило. Я'Я согласен, что XML (и т. д.) следует использовать, если это возможно, но иногда этоЭто невозможно или нецелесообразно. Просто думатьHTML + regex = bad избегает принятия решений. Иногда регулярное выражение уместно. Мы неНе знаю формат данных или источник. За это проголосовали 2 раза, но нена самом деле дать ОП ответ.

Вы также можете сделать это с помощью двух функций вrvest пакет:

library(rvest)

strip_html <- function(s) {
    html_text(read_html(s))
}

Пример вывода:

> strip_html("junk junk<a href="\"/wiki/abstraction_(mathematics)\"" title="\"abstraction" (mathematics)\"=""> junk junk")
[1] "junk junk junk junk"
</a>

Обратите внимание, что вы не должны использовать регулярные выражения для анализа HTML.

 Motin08 сент. 2018 г., 22:39
Обратите внимание, что входная строка ДОЛЖНА содержать некоторые html-теги, иначе read_html будет трактовать аргумент как локальный путь к файлу.

Другой подход, используя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"
</a>
 Motin08 сент. 2018 г., 22:20
Примечание: эта библиотека требует Java, что может быть ограничением в различных средах R-сервера

нет обратной косой черты в строке, которую вы опубликовали. Вы'мы стали жертвами одной из классических ошибок: не так страшно, как участие в земельной войне в Азии, но, тем не менее, заметной. Вы'перепутать R 'с использованием\ для обозначения экранированных символов для буквенных слэшей. В этом случае,\" означает двойную кавычку, а не два буквенных символа\ а также", Ты можешь использоватьcat чтобы увидеть, как будет выглядеть строка, если экранированные символы трактуются буквально.

Во-вторых, тыИспользование регулярных выражений для разбора HTML. (Они нене появляются в вашем коде, но они используются под капотом вstr_locate_all а такжеstr_replace_all.) Это еще одна из классических ошибок; увидетьВот для большей экспозиции.

В-третьих, вы должны были упомянуть в своем посте, что выиспользуяstringr пакет, но это только небольшая ошибка по сравнению.

 Ryan Warnick21 июн. 2013 г., 05:55
Строка темы была ошибкой, отредактировал ее.

Ваш ответ на вопрос