在文本挖掘中清理街道地址
Cleaning Street Addresses in Text Mining
寻找一种方法从我目前拥有的文本中删除街道地址。是否有正则表达式可以检测数字范围内的文本?我在想的是我有一个邮政编码,通常地址开头有一个数字。
1234 Parks St., Los Angeles, CA 90001
我的主要问题是我想在进行其他清理并在我的集合中寻找其他词时从我的数据集中删除街道名称。
我正在使用 Rstudio 进行清洁。
这 return 是一个字符向量。将正则表达式解读为使用括号将其分成三个捕获组:第一个是连续数字的任意计数,然后是任意数量的非数字,然后是 5 位数字。 Return 只有第一个和第三个中间有 space(如果有匹配),如果没有匹配则不做任何更改;
> gsub("([0-9]*)(\D*)(\d{5})", "\1 \3", test)
[1] "1234 90001" "9876 94501"
需要进一步解析为return一组数值向量
> scan( text=gsub("([0-9]*)(\D*)(\d{5})", "\1 \3", test), what=list("", "") )
Read 2 records
[[1]]
[1] "1234" "9876"
[[2]]
[1] "90001" "94501"
以字符形式读取 zips 可能更好(因为您希望保留前导零),但可以通过更改 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
寻找一种方法从我目前拥有的文本中删除街道地址。是否有正则表达式可以检测数字范围内的文本?我在想的是我有一个邮政编码,通常地址开头有一个数字。
1234 Parks St., Los Angeles, CA 90001
我的主要问题是我想在进行其他清理并在我的集合中寻找其他词时从我的数据集中删除街道名称。
我正在使用 Rstudio 进行清洁。
这 return 是一个字符向量。将正则表达式解读为使用括号将其分成三个捕获组:第一个是连续数字的任意计数,然后是任意数量的非数字,然后是 5 位数字。 Return 只有第一个和第三个中间有 space(如果有匹配),如果没有匹配则不做任何更改;
> gsub("([0-9]*)(\D*)(\d{5})", "\1 \3", test)
[1] "1234 90001" "9876 94501"
需要进一步解析为return一组数值向量
> scan( text=gsub("([0-9]*)(\D*)(\d{5})", "\1 \3", test), what=list("", "") )
Read 2 records
[[1]]
[1] "1234" "9876"
[[2]]
[1] "90001" "94501"
以字符形式读取 zips 可能更好(因为您希望保留前导零),但可以通过更改 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