识别和关联来自不同来源的城市

时间:2015-10-02 11:22:55

标签: analysis identification

我有不同的提供商通过我在不同城市的Excel,在每个城市他们使用一些特殊的代码进行操作,更多的数据对我的业务有用。

问题在于我对所有这些城市都很乱:

  • 我的数据库中有自己的城市,大约有9000条记录。
  • 提供商A给我他的excel或webservice来获得6000左右。
  • 提供商B给了我另外5000个。
  • 提供商C ......等

我的提供商提供的一些城市已经在我的数据库中,我只需要更新我需要的所需数据。

否则,我必须在我的数据库中插入新城市。

而这一点,每次提供商都会向我提供这些城市的最新信息。

嗯,主要问题是我称城市与他们不同,他们彼此不同 ...如何知道我是否已经拥有该城市或者我必须创建一个新城市一个,因为我们使用不同的名字?

我看到它的方式,我只能手动实现它。将他们的城市与地雷进行比较。

当然,这是太多的工作,所以我制作了自己的脚本,并为数据库实现了 levehnstein 功能,我可以自动看到更重合的并通过点击选择它们。该脚本完成剩下的工作(将该城市的特殊操作代码更新为存储在我数据库中的相应城市)。

即便如此,我仍然觉得我错过了什么。如果这些城市有一个unicode,这将更加容易和自动化,但我没有任何代码可以识别这些城市而不是我的表格标识符。我的供应商也是如此,尽管有一些用途是在他们提供的城市中提供邮政编码,但不是全部。

对此有没有比我更好的解决方案?您经常使用的任何通用代码或任何其他aproatch?

修改: 那么,每个城市都属于一个国家。当然,我正在考虑这个问题。

在我的城市表中,每个目的地都有一个Id,然后是每个提供商的操作代码列(我知道,这可以用更多的关系更好地表示),加上国家代码,zip,URL为seo ......

尊重MagnusL提到的解决方案,创建一个同义词表,为什么我需要存储同义词?关于你提到的levehnstein和人工互动的剧本,这正是我目前所做的:

由提供者和目的地表提供的每条记录。鉴于提供者城市记录,我在表格中显示更多重合的记录。

但在此之前,我会自动链接所有与邮政编码和国家/地区重合的邮件。

为每个城市更新我的提供商特殊操作代码需要做很多工作。我只是好奇人们如何处理这个问题,我相信很多开发人员必须在某个时候面对这个问题。

2 个答案:

答案 0 :(得分:3)

If it is important that the cities are correctly matched, I would guess you must have some manual steps in your process. If you include names of smaller towns you will some day encounter that the same name could actually be two different places in two different countries. (Try Munich on Google Maps and you get one in Germany and one in North Dakota.)

A somewhat complicated, but I guess future proof, workflow is to use id numbers in place of city names in your main data table. Then set up a locations table with those id numbers as primary keys and your preferred name of the city followed by as many meta data columns as required for country code, zip code, WGS84 coordinates, continent name, whatever. Add another table for city name synonyms, with just id numbers and names (without array = [1,2,3,4,7] amount = 17 master_array = (1..array.size).map { |i| array.each_slice(i).to_a } master_array.each.with_index do |e,i| p e[0] if master_array[i][0].inject(:+) == amount end constraint on the id column).

Let your import script try to match the city with help from as many meta data as possible (probably different meta data from different providers), together with the Levehnstein algorithm you mentioned, and let it be clever enough to ask for human interaction in those cases where no one or more than one city are matched. It can of course show you the closest possible guesses, so you can pick the right one and have it stored in the synonym table.

(Yes, it is a lot of coding to get there. If you find it worth it or not depends on how often you do these updates.)

Tip: Wikipedia has articles with different names on cities, i.e. https://en.wikipedia.org/wiki/List_of_names_of_European_cities_in_different_languages

答案 1 :(得分:0)

如果您使用额外的表格进行名称翻译怎么办? IE,该表将有2列:列A您使用的名称,列B,提供程序使用的名称。您可能需要手动调整此表,如下所示:

Bruxelles:Brussels
Bruxelles:Brussel
Bruxelles:Bruxelles

导入时,您将使用

作为城市名称
select A where B = Brussels

在您的聚合数据库中,名称将保持一致。