1

我在包含位置名称的数据库中有一个“有点”丑陋的字段。例如,麦迪逊广场花园也被命名为“麦迪逊广场花园”等。

我正在尝试提取数据,以便获得所有位置的准确列表。为了实现这一点,我所做的是创建一个 sql 查询,在其中加入每个位置的事件,然后按位置名称分组,并且只使用具有 10 个以上条目的位置组(过滤掉一些非可靠的条目),但我仍然会得到一些非常不同的拼写和条目,从而导致重复的属性/位置。

我的 SQL 查询看起来像这样

"选择位置,COUNT(*) FROM 位置
在locations.lid=events.lid 上加入事件
哪里`长`
之间 - 74.419382608696
和 - 73.549817391304
和纬度
40.314017391304 之间
和 41.183582608696
按位置分组
计数(*)>10

运行此查询会提供 3 个不同的条目“麦迪逊广场花园”、“麦迪逊广场花园”、“麦迪逊广场花园”。当然,这只是针对麦迪逊广场花园的入口。大多数条目有多个略有不同的拼写。

我通过纬度/经度限制我的搜索,因此我不会在不同城市中获得具有相同名称的位置。

有没有办法使用正则表达式或 GROUP 子句中的东西来使这些分组一致?即使只是在分组之前删除尾随的“s”和“the”也可能是一个很大的好处。

我打算获取每个结果,然后对纬度/长期范围内的所有位置进行正则表达式匹配?

幸运的是,我有足够多的与地点相关联的事件,因此我能够在一定程度上识别出主要地点。

从半结构化数据中提取位置的任何其他建议?数据是从各种来源废弃的,所以我无法控制输入。

4

2 回答 2

1

这里有一些建议给你。

在您的数据库中创建一个规范化的场地名称列:(1)通过一些简单的转换运行每个名称......将“麦迪逊广场花园”和“华盛顿纪念碑”变成“麦迪逊广场花园”和“华盛顿纪念碑”转复数名词转换为单数最简单的方法......从你名字中的每个单词中去掉“es”,然后去掉“s”。贬低一切。消除任何剩余的短词“a”“it”“the”“and”“&”你明白了。将您的单词按字母顺序排序,让您“花园麦迪逊广场”将生成的字符串存储到表中的新列中。匹配它,同时仍然显示您的原始字符串。

(2) 创建一个包含场地变体拼写的查找表。这适用于“波士顿花园”/“舰队中心”/“TD Banknorth 花园”/“北站”之类的场地名称和类似的垃圾。同一个地方,不同的写法。(以“Penn Station”为例)。

(3) 您可以使用Yahoo 或Google Maps 地理编码服务,这些服务将获取不完整的名称和地址并对其进行标准化。

Soundex 将为您提供相当多的误报匹配。它被设计为后备,需要人工消歧。

于 2009-11-26T01:07:30.573 回答
0

If your issue is treating "similar" strings the same, you may want to check out the SOUNDEX algorithm. I'm not sure if it will work for all of your different scenarios, but it's a start.

It's discussed in this thread: How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?

于 2009-11-25T23:12:26.597 回答