4

私は、XMLパッケージを使用してhtmlテーブルをRデータフレームにスクレイピングしてWebから一部のhtmlをスクレイピングし、Rで操作する際に、非常に役立つ応答を取得してきました。

XMLパッケージは、テキスト文字列内のアルファベット以外の文字のエスケープについてかなり徹底しているようです。XMLまたは他のパッケージに、XMLを介してデータを渡す場合にエスケープする文字の一部またはすべてを逆にする簡単な方法はありますか?私は自分でそれを始めましたが、「代表的なJoaquÃÂnCastro」のような事件に遭遇した後、「より良い解決策があるに違いない...」と思いました。

わかりやすくするために、XMLパッケージを使用してこのHTMLを解析します

 library(XML)
 apos_str <- c("<b>Tim O'Reilly</b>")
 apos_str.parsed <- htmlTreeParse(apos_str, error=function(...){})
 apos_str.parsed$children$html[[1]][[1]]

を生成します

 <b>Tim O&apos;Reilly</b>

そして、理想的にはそれを検索する関数またはパッケージが欲しいです

&apos; 

そしてそれを元に戻します

'<b>Tim O'Reilly</b>'

編集明確にするために、以下のコメントから、アポストロフィの特定のケース、またはデータに表示される他の文字に対してこれを行う方法を取得します。私が探しているのは、誰かがこれをより一般的に解決したパッケージです。

私がこれまでに行った調査:

-エスケープに関するXMLドキュメントで見つけたものをすべて読んでください。

-CRANNLPページで有望なパッケージを探しました。

-ここSOで「unescape[R]」と「reverseescape[R]」を検索しました。何も進まなかったので、ここに質問を持ってきたいと思いました。

4

1 に答える 1

4

難しさを理解しているかどうかはわかりません。置換のための文字列処理は、基本正規表現関数で行われます: sub、gsub、regexpr、gregexpr

?sub # the same help page will also discuss 'gsub'
txt <- '<b>Tim O&apos;Reilly</b>'
sub("\\&apos;", "'", txt)
[1] "<b>Tim O'Reilly</b>"

「&」と「;」の間にある値のリストがある場合 それらを分割してから再結合できます。誰かがすでにそれを行っていることをあなたが望んでいた可能性があると思います. 達成したい抽象化のレベルを明確にする必要があります。

編集: ブロガーが「&apos」の特定のケースについて説明しています http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/

私は自分でさらにいくつかの調査を行いました。それらは適切に「エスケープ」と呼ばれるのではなく、「名前付きエンティティ」と呼ばれます。rhelp アーカイブにそれらへの参照が見つかりません。これらの「エンティティ」を定義する XML リストを w3.org Web サイトからダウンロードし、検索と置換をサポートする表形式に変換しようとしています。しかし、「ホアカン・カストロ議員」についてのあなたのコメントは、私を当惑させました。奇数文字は「$#xxx」の形式ではないため、.........正確には何を求めているのでしょうか? 期待される出力を含む適切なテスト ケースを投稿してください。

編集 2: Rhelp で David Carlson が回答した Michael Friendly からの基本的に同じ質問でした。Rhelpアーカイブの投稿へのリンクは次のとおりです。

https://stat.ethz.ch/pipermail/r-help/2012-August/321478.html

彼はすでに、私が翻訳テーブルを作成するよりも優れた仕事をしており、HTML テキストを行進するためのコードを含めています。(そしてボーナス... 彼は含まれていました&apos)。そして、Michael Friendly からの翌日のフォローアップは、プロセスを関数にまとめました。アーカイブ ページのリンクをたどることができます。

于 2012-08-12T19:01:35.407 に答える