Удаление всего, кроме тегов html из корпуса - PullRequest
1 голос
/ 26 марта 2012

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

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

<html>
<body>

<h1>hello</h1>

</body>
</html>

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

<html> <body> <h1>

(Или с закрывающими тегами я не против.)

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

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Я не знаком с 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, проверьте этот сайт для получения дополнительной информации. По сути, первый gsub выше заменит весь текст между > и <, который не является открытой или закрывающей скобкой (то есть весь текст без тегов). Второй gsub заменит весь текст, который начинается с </ и заканчивается > ничем - удаляя закрывающие теги из строки

0 голосов
/ 26 марта 2012

(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 

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

(2) XML

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

library(XML)
doc <- htmlTreeParse(tolower(s), asText = TRUE, useInternalNodes = TRUE)
tags <- xpathSApply(doc, "//*", xmlName)
table(tags)
0 голосов
/ 26 марта 2012

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

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

...