我在包含位置名称的数据库中有一个“有点”丑陋的字段。例如,麦迪逊广场花园也被输入为“麦迪逊广场花园”等。分组以提取半结构化数据中的常见值
我试图提取数据,以便我可以得到所有位置的准确列表。 为了做到这一点,我所做的是创建一个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