1

パッケージを使用していますtm。HTML ドキュメントでいっぱいのコーパスがあり、html タグ以外をすべて削除したいと考えています。私は数日間それをやろうとしてきましたが、良い解決策を見つけることができないようです.

たとえば、次のようなドキュメントがあるとします。

<html>
<body>

<h1>hello</h1>

</body>
</html>

ドキュメントを次のようにしたいと思います。

<html> <body> <h1>

(または、終了タグについては、あまり気にしません。)

私の目標は、ドキュメント内で各タグが使用された回数を数えることです。

4

3 に答える 3

2

私は tm に詳しくありませんが、正規表現を使用してそれを行う方法を次に示します。

(前提: 文字列は HTML タグで始まり、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 は、>との間のすべてのテキストを置き換えます。<これは開きかっこでも閉じかっこでもないものです (つまり、タグ以外のすべてのテキスト)。</2 番目の gsub は、で始まり、で終わるすべてのテキストを何も置き換え>ません。文字列から終了タグを削除します。

于 2012-03-26T16:10:02.680 に答える
0

http://rss.acs.unt.edu/Rdoc/library/XML/html/xmlTreeParse.htmlのようなものを調べる必要があります

上記のリンクで、サンプルコードを見てください。エンティティを印刷する方法を示すセクションがあります。私はこのパッケージを使用していないので、直接保証することはできません.

于 2012-03-26T16:21:21.680 に答える
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 

ファイルが非常に大きい場合、gsubfn の開発バージョンには高速バージョンのstrapplyc.

(2)XML

上記のアプローチは、引用符で囲まれた文字列やその他の境界ケースに<and記号がある場合、混乱する可能性があります。>とにかく入力にそのようなインスタンスがないかもしれませんが、この2番目のアプローチでその問題が発生しない場合に備えて:

library(XML)
doc <- htmlTreeParse(tolower(s), asText = TRUE, useInternalNodes = TRUE)
tags <- xpathSApply(doc, "//*", xmlName)
table(tags)
于 2012-03-26T16:45:53.337 に答える