6

pdftotext(コマンドラインツール)を介してPDFスクレイピングのファイルである文字ベクトルがあります。

すべてが(幸いにも)うまく並んでいます。ただし、ベクトルには、正規表現を回避するタイプの空白が含まれています。

> test
[1] "Address:"              "Clinic Information:"   "Store "                "351 South Washburn"    "Aurora Quick Care"    
[6] "Info"                  "St. Oshkosh, WI 54904" "Phone: 920‐232‐0718"   "Pewaukee"  

> grepl("[0-9]+ [A-Za-z ]+",test)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

> dput(test)
c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
"Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920‐232‐0718", 
"Pewaukee")

> test.pasted <- c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
+                  "Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920‐232‐0718", 
+                  "Pewaukee")

> grepl("[0-9]+ [A-Za-z ]+",test.pasted)
[1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

> Encoding(test)
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown"

> Encoding(test.pasted)
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "UTF-8"   "unknown"

明らかにdput、以下の質問のように、に割り当てられていない文字がいくつかあります。

国際化されたテキストを適切に複製する方法は?

ベクトル全体をコピーして貼り付けることができません...この空白以外の空白を検索して破棄するにはどうすればよいですか?

編集

答えはいたるところにあるので、明らかに私は明確にさえ近づいていませんでした。さらに単純なテストケースを次に示します。

> grepl("Clinic Information:", test[2])
[1] FALSE
> grepl("Clinic Information:", "Clinic Information:") # Where the second phrase is copy/pasted from the screen
[1] TRUE

画面と出力に印刷された「Clinic」と「Information」の間に1つのスペースがありますがdput、文字列に含まれるものはすべて標準のスペースではありません。私の目標は、これを排除して、その要素を適切にgrepできるようにすることです。

4

4 に答える 4

5

コメントを回答にア​​ップグレードする:

文字列には、貼り付けたときに通常のスペースに変換されたノーブレークスペース(U + 00A0)が含まれています。Unicodeの奇妙なスペースのような文字をすべて一致させるのは、perlスタイルの正規表現を使用すると簡単です。

grepl("[0-9]+\\p{Zs}[A-Za-z ]+", test, perl=TRUE)

perl regexp構文は\p{categoryName}、余分な円記号は円記号を含む文字列の構文の一部であり、「Zs」は「Separator」Unicodeカテゴリ、「space」サブカテゴリです。U+00A0文字だけのより簡単な方法は次のようになります。

grepl("[0-9]+[ \\xa0][A-Za-z ]+", test)
于 2012-07-28T20:51:11.087 に答える
1

私はあなたが空白を引きずってリードした後だと思います。もしそうなら、多分この関数は動作します:

Trim <- function (x) gsub("^\\s+|\\s+$", "", x)

また、タブなどにも注意してください。これは便利な場合があります。

clean <- function(text) {
    gsub("\\s+", " ", gsub("\r|\n|\t", " ", text))
}

したがって、次のようにクリーンを使用してからトリムを使用します。

Trim(clean(test))

また、enダッシュ(–)とemダッシュ(—)にも注意してください。

于 2012-07-28T16:49:07.873 に答える
1

空白については何も異常はありませんが、電話番号のダッシュはU+2010 (HYPHEN)ASCIIハイフン(U+002D)ではなく、です。

于 2012-07-28T17:41:24.010 に答える
0
test <- c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
"Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920‐232‐0718", 
"Pewaukee")

> grepl("[0-9]+ [A-Za-z ]+",test)
[1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE


library(stringr)
test2 <- str_trim(test, side = "both")

> grepl("[0-9]+ [A-Za-z ]+",test2)
[1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
# So there were no spaces in the vector, just the screen output in this case.
于 2012-07-28T17:09:07.837 に答える