2012-03-26 3 views
1

Я пользуюсь пакетом tm. У меня есть полный текст html, и я хотел бы удалить все, кроме тегов html. Я пытался сделать это в течение нескольких дней, но, похоже, я не нашел подходящего решения.Удаление всего, кроме html-тегов из корпуса

Например, скажем, у меня есть документ, как это:

<html> 
<body> 

<h1>hello</h1> 

</body> 
</html> 

Я хотел бы этот документ, чтобы стать, как это:

<html> <body> <h1> 

(Или с закрывающими тегами, я не» t really mind.)

Моя цель - подсчитать, сколько раз каждый тег используется в документе.

ответ

2

Я не знаком с tm, но вот как вы могли это сделать, используя регулярные выражения.

(Предпосылка: ваша строка начинается и заканчивается с HTML тега)

str <- "<html><body><p>test<p>test2</body></html>" 
str <- gsub(">[^<^>]+<", "> <", str) # remove all the text in between HTML tags, leaving only HTML tags (opening and closing) 
str <- gsub("</[^<^>]+>", "", str) #remove all closing HTML tags. 

Это оставит вас с нужной строки.

Если вы новичок в RegEx, ознакомьтесь с this site для получения дополнительной информации. В принципе, первый gsub выше заменит весь текст между > и <, который не является открытым или закрытым скобком (т. Е. Не тегом тега). Второй GSUB заменит весь текст, который начинается с </ и заканчивается > ни с чем - удалением закрывающих тегов из строки

+0

Это может работать, если он имеет очень простой HTML, но в целом вы не можете разбора HTML с регулярным выражением , Например, это не приведет к вычеркиванию атрибутов. – frankc

+2

@frankc Если вы собираетесь оставить этот комментарий, вы действительно должны ссылаться на [Вопрос] (http://stackoverflow.com/q/1732348/324364). :) – joran

0

Вы должны смотреть на что-то вроде http://rss.acs.unt.edu/Rdoc/library/XML/html/xmlTreeParse.html

В приведенной выше ссылке, посмотрите на примере код. Существует раздел, который показывает, как печатать объекты. Я не использовал этот пакет, поэтому я не могу ручаться за него напрямую.

0

(1) gsubfn

s Предполагая, что это входная строка (она может содержать символы перевода строки) это соответствует < следует все, что не /, > или пробел и извлекает его в тег. table функция табуляты вхождений:

library(gsubfn) 
tags <- strapply(tolower(s), "\\<([^/> ]+)", c, simplify = unlist) 
table(tags) 

Например,

s <- "<html> 
<body> 

<h1>hello</h1> 

</body> 
</html>" 
tags <- strapply(tolower(s), "\\<([^/> ]+)", c, simplify = unlist) 
table(tags) 

дает это:

tags 
body h1 html 
    1 1 1 

Если файл очень большой, то the development version of gsubfn имеет быструю версию под названием strapplyc.

(2) XML

выше подход может запутаться, если есть < и > символы в кавычках и других пограничных случаях.Там не может быть никаких таких случаев в вашем входе в любом случае, но только в случае, если этот второй подход не должен иметь эту проблему:

library(XML) 
doc <- htmlTreeParse(tolower(s), asText = TRUE, useInternalNodes = TRUE) 
tags <- xpathSApply(doc, "//*", xmlName) 
table(tags) 
Смежные вопросы