有誰知道一個好的腳本(或好策略)在MySQL數據庫上進行模糊的街道地址搜索嗎?主要問題是:MySQL街道地址模糊搜索
- 資本(容易 - 只需使用LCASE)
- 標點符號(可以用更換;不知道它有更快捷的購)
- 縮寫(這是艱難的一個 - 街道= ST等)
我希望能夠匹配: 解放路123號,單元b = 123大街單元b
有誰知道一個好的腳本(或好策略)在MySQL數據庫上進行模糊的街道地址搜索嗎?主要問題是:MySQL街道地址模糊搜索
我希望能夠匹配: 解放路123號,單元b = 123大街單元b
雖然它並不完美,可以說是相當緩慢的,你」我希望通過REGEXP()使用正則表達式。
這裏的第一通正則表達式匹配大多數情況下(以及你的例子):
(?isx) # search across multiple lines and ignore case
( # full match
( # st number - what about number words like one or two?
\d+
)
\s+ # whitespace
( # street name (one or more words)
[a-z]+
(?:
\s+
[a-z]+
)*
)
\s+ # whitespace
( # street type
al(?:y\.?|ley) # aly, aly. or alley
|
ave(?:\.|nue)? # ave, ave., or avenue
|
b(?lvd\.?|oulevard) # blvd, blvd. or boulevard
|
c(?:t\.?|ourt) # ct, ct. or court
|
cir(?:\c\.?|cle)? # cir, circ, circ. or circle
|
cres(?:\.|cent)? # cres, cres. or crescent
|
dr(?:\.|ive)? # dr, dr. or drive
|
exp(?:y\.?|ressway) # expy, expy. or expressway
|
f(?:wy\.?|reeway) # fwy, fwy. or freeway
|
g(?:rdns\.?|ardens) # grdns, grdns. or gardens
|
h(?:wy\.?|ighway) # hwy, hwy. or highway
|
l(?n\.?|ane) # ln, ln. or land
|
m(?:nr\.?|anor) # mnr, mnr. or manor
|
m(?:trwy\.?|otorway) # mtrwy, wtrwy. or motorway
|
pl(?:\.|ace)? # pl, pl. or place
|
r(?:d\.?|oad) # rd, rd. or road
|
st(?:\.|reet)? # st, st. or street
|
t(?:pk\.?|urnpike) # tpk, tpk. or turnpike
|
ter(?:\r?\.?|race) # ter, ter., terr, terr. or terrace
|
tr(?:l.\?|ail) # trl, trl. or trail
|
pike|park|walk|loop|bay|close|gate|highlands
|
row|way|oval|dell|rise|vale|byway|lawn
)
\,? # optional comma
\s+ # whitespace
( # optional number, unit, apt or floor
(
\# # number
|
unit # unit
|
num(?:\.|ber) # num, num. or number
|
ap(?:t\.?|artment) # apt, apt. or apartment
|
fl(?:\.|oor)? # fl, fl. or floor
)
\s+
\d+
)?
)
將返回:
$第1 - 全場比賽
$ 2 - 門牌號
$ 3 - 街道名稱
$ 4 - 街道類型
$ 5 - 單位或apt號(可選)
在MySQL中使用它,你需要去掉所有的註釋(從「#」到EOL),刪除第一線(開關選項) ,並將所有內容全部摺疊爲一行而不用任何空格。
做好finding matches是沒有希望的,除非你先用standardize。一旦你通過標準化軟件傳遞你的地址,搜索是微不足道的,因爲完全匹配就足夠了。
正如Mike所指出的那樣,您所描述的是地址標準化。我在SmartyStreets的這個領域工作(地址就是我們所做的)。
美國郵政總局有一些指導稱爲出版物28,其中描述了預期的地址格式。如果您打算全部使用這些地址,則需要根據該格式進行標準化,並且在大多數情況下,請執行標準化字符串的精確字符串比較。
LiveAddress API做了這樣的事情,但如果你已經有一個地址列表標準化,你可以看看list processing service。
您可以使用益百利QAS的地址數據。它的每次點擊許可證。模糊搜索對數據很好,收件人更準確。
請參閱:http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html否則,請看http://sphinxsearch.com/ – 2011-05-14 17:34:30