清理文本挖掘中的街道地址

时间:2016-08-15 21:10:52

标签: regex r text-mining

寻找从我目前拥有的文字中删除街道地址的方法。是否有正则表达式可以检测数字范围内的文本?我在想的是我有一个邮政编码,通常是地址开头的数字。

1234 Parks St.,Los Angeles,CA 90001

我的主要问题是,当我进行其他清洁工作并在我的设置中查找其他字词时,我想从我的数据集中删除街道名称。

我正在使用Rstudio进行清洁。

1 个答案:

答案 0 :(得分:1)

返回一个字符向量。读取正则表达式,将其分为三个捕获组:parens:第一个是连续数字的任何计数,后跟任意数量的非数字,后跟5个数字。只返回第一个和第三个,中间有一个空格(如果匹配),如果不匹配则不做任何更改;

> 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"

可能更好地将拉链作为字符读取(因为您需要保留前导零),但可以通过更改what列表类型将街道号码转换为数字:

> 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"

使这更有用:

> 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