2016-08-15 9 views
-2

現在のテキストから住所を削除する方法をお探しです。数字の範囲内でテキストを検出できる正規表現はありますか?私が考えているのは、私は郵便番号と通常アドレスの先頭に数字があるということです。テキストマイニングのストリートアドレスのクリーニング

1234公園セント、ロサンゼルス、CA 90001

は私の主な問題は、私は私の他のクリーニングを行いながら、私のデータセットから通りの名前を削除し、私のセット内の他の単語を見てみたいということです。

私はRstudioを使用してクリーニングを行っています。

+0

あなたの住所が構造上実質的に同一でない場合は、ジオコーディングが最良の方法です:http://stackoverflow.com/questions/16413/parse-usable-street-address-city-state-zip- from-a-string – majom

+0

期待される出力は何ですか? '1234 90001'? – zx8754

+0

それは私が目指したいものです。各テキスト行にはさまざまな情報が混在しています。時々、会話の要約だけです。時には、「Johnは1234 Parks St.、Los Angeles、CA 90001に連絡される」などのアクションです。 – djturbine

答えて

1

これは文字ベクトルを返します。正規表現を3つのキャプチャグループに分割し、括弧で区切って読んでください。最初の数字は連続した数字の数で、それに続く任意の数の非数字、5桁の数字です。最初と3番目のものだけを空白で返します(一致するものがある場合)。一致しない場合は変更しません。

> gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test) 
[1] "1234 90001" "9876 94501" 

さらに、(あなたが先行ゼロを維持するために必要になるため)文字としてジッパーで読むためにおそらくより良い数値ベクトル

> scan(text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), what=list("", "")) 
Read 2 records 
[[1]] 
[1] "1234" "9876" 

[[2]] 
[1] "90001" "94501" 

のセットを返すために解析する必要があるだろうが、通りを変換することができこれは、より便利にするために

> scan(text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), what=list(numeric(), "")) 
Read 2 records 
[[1]] 
[1] 1234 9876 

[[2]] 
[1] "90001" "94501" 

whatリストの種類を変えることで、数値の数字

> setNames(data.frame(scan(text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), 
           what=list(numeric(), "")) , 
         stringsAsFactors=FALSE), 
      c("StrtNumber", "ZIP")) 
Read 2 records 
    StrtNumber ZIP 
1  1234 90001 
2  9876 94501 
関連する問題