我在包含位置名稱的數據庫中有一個「有點」醜陋的字段。例如,麥迪遜廣場花園也被輸入爲「麥迪遜廣場花園」等。分組以提取半結構化數據中的常見值
我試圖提取數據,以便我可以得到所有位置的準確列表。 爲了做到這一點,我所做的是創建一個SQL查詢,我加入每個位置的事件,然後按位置名稱進行分組,並且只使用具有多於10個條目的位置組(過濾掉某些不是 - 可靠的條目),但我仍然結束了一些非常不同的拼寫和條目,導致重複的屬性/位置。
我的SQL查詢看起來像這樣
"SELECT location, COUNT(*) FROM locations JOIN event ON locations.lid=events.lid WHERE `long` BETWEEN - 74.419382608696 AND - 73.549817391304 AND lat BETWEEN 40.314017391304 AND 41.183582608696 GROUP BY location HAVING COUNT(*)>10
運行此查詢提供了3個不同的條目「麥迪遜廣場花園」,「麥迪遜廣場花園」,「麥迪遜廣場花園」。當然,這只是麥迪遜廣場花園的入場券。大多數條目有多個稍微不同的拼寫。
我用lat/long限制我的搜索,所以我沒有在分組到一起的不同城市中獲得同名的位置。
是否有正則表達式或GROUP子句中的某些方法來使這些分組保持一致?即使只是在分組之前刪除尾部's'和'the'也可能是一大好處。
我打算取每個結果,然後在經緯度範圍內對所有位置進行正則表達式匹配?
幸運的是,我有足夠的鏈接事件到位置,我有點能夠識別主要位置。
從半結構化數據中提取位置的任何其他建議? 數據從各種來源報廢,所以我無法控制輸入。
對於Soundex來說不是一個好主意,但是通過soundex(location)的分組返回與非soundex查詢相同的結果。 – pedalpete 2009-11-26 00:00:54
也許你可以嘗試更先進的算法,然後像這裏:http://codejanitor.com/wp/2007/02/10/levenshtein-distance-as-a-mysql-stored-function/ – dcp 2009-11-26 00:03:32
我只是讀完全一樣的東西! – pedalpete 2009-11-26 00:11:49