9

私はrvestウェブサイトを解析するために使用しています。私はこれらの小さな壊れないスペースで壁にぶつかっています。 解析された html ドキュメントの要素によって作成された空白をどのように削除しますか?

library("rvest")
library("stringr")  

minimal <- html("<!doctype html><title>blah</title> <p>&nbsp;foo")

bodytext <- minimal %>%
  html_node("body") %>% 
  html_text

今、本文を抽出しました:

bodytext
[1] " foo"

ただし、その厄介な空白を削除することはできません。

str_trim(bodytext)

gsub(pattern = " ", "", bodytext)
4

6 に答える 6

9

ジダリソンはこう答えました。

gsub("\\W", "", bodytext)

そして、それは機能しますが、使用できます:

gsub("[[:space:]]", "", bodytext)

すべて削除されますSpace characters: tab, newline, vertical tab, form feed, carriage return, space and possibly other locale-dependent characters。これは、他の不可解な正規表現クラスに代わる非常に読みやすい代替手段です。

于 2014-12-01T21:20:54.603 に答える
8

私は同じ問題に遭遇し、単純な置換に落ち着きました

gsub(intToUtf8(160),'',bodytext)

(大文字と小文字を修正するために編集されました。)

于 2015-09-30T23:42:30.650 に答える
2

これが最も堅牢なアプローチだと思うので、これを投稿します。

ウィキペディアのページをスクレイピングし、出力にこれを取得しました(適切にコピーして貼り付けるかどうかはわかりません):

x <- " California"

そしてgsub("\\s", "", x)、何も変更しなかったため、何か怪しいことが起こっているというフラグが立てられました。

調査するために、次のことを行いました。

dput(charToRaw(strsplit(x, "")[[1]][1]))
# as.raw(c(0xc2, 0xa0))

その文字がメモリにどのように正確に格納/認識されているかを把握するため。

これがあればgsub、他のソリューションよりも少し堅牢に使用できます。

gsub(rawToChar(as.raw(c(0xc2, 0xa0))), "", x)
# [1] "California"

(エンコーディングを設定するという @MrFlick の提案は私にはうまくいきませんでした。@shabbychef が の入力160をどこで取得したかは明らかではありませんintToUtf8。このアプローチは、他の同様の状況に一般化できます)

于 2016-02-24T18:53:46.660 に答える