2012-03-26 28 views
1

私はパッケージtmを使用しています。私はhtml文書でいっぱいのコーパスを持っており、htmlタグ以外のすべてを削除したいと思います。私は数日間それをしようとしてきましたが、私は良い解決策を見つけることができないようです。例えばコーパスからhtmlタグを除くすべてを削除する

、のは、私はこのような文書を持っているとしましょう:

<html> 
<body> 

<h1>hello</h1> 

</body> 
</html> 

私は、文書は次のようになりたいでしょう:

<html> <body> <h1> 

(または終了タグと、私は「ドン私の目標は、各タグがドキュメントで何回使用されたのかを数えることです。

答えて

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をご覧ください。基本的には、上の最初の部分は、開かれた括弧ではない(すなわち、非タグのすべてのテキスト)><の間のすべてのテキストを置き換えることになります。例を見て、あなたは上記のリンクでhttp://rss.acs.unt.edu/Rdoc/library/XML/html/xmlTreeParse.html

のようなものになります文字列

+0

これはうまくいくかもしれない彼は本当に簡単なHTMLを持っていますが、一般的に、あなたが正規表現で解析HTMLをカント場合。例えば、これは属性をストリングしません。 – frankc

+2

@frankcあなたがそのコメントを残そうとするなら、本当に[The Question](http://stackoverflow.com/q/1732348/324364)にリンクする必要があります。 :) – joran

0

から終了タグを削除 - 二GSUBは</で始まり、何も>で終わるすべてのテキストを置き換えますコード。エンティティの印刷方法を示すセクションがあります。私はこのパッケージを使用していないので、直接保証することはできません。

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 gsubfnstrapplycと呼ばれる高速なバージョンがあります。

(2)XML

引用文字列と他の境界例で<>記号がある場合は、上記のアプローチは混乱して得ることができます。そことにかく、あなたの入力のいずれかのような場合ではないかもしれないが、念のために、この第2のアプローチは、その問題を持つべきではありません。

library(XML) 
doc <- htmlTreeParse(tolower(s), asText = TRUE, useInternalNodes = TRUE) 
tags <- xpathSApply(doc, "//*", xmlName) 
table(tags) 
関連する問題