如何处理名称不同的城市名称

时间:2018-06-04 15:42:42

标签: c# error-correction

我有以下任务。我有银行照片列表,其中有城市,它是takene。我正在尝试编写导入它们的程序。问题是同一个城市的写法可能不同:

  • 简单案例:REYKJAV Í K或Reykjav k。可以通过不变的不区分大小写的比较来解决。
  • 更难的案例:Lviv或Lvov - 可以使用Levenstein距离来解决。对于这种情况,如果城市从相同的字母开始并且距离小于或等于1 - 我们可以匹配。
  • 更难的案例:布鲁塞尔vs布鲁塞尔。
  • 只是另一个:m.Wroclaw(读作弗罗茨瓦夫市)

最后,我需要将所有这些城市的“synonims”映射到一些共同点。

因此,我的问题是 - 你能说明如何实现这一目标吗?

我尝试了什么:

  1. 不区分大小写的比较+转换为不变量 - 有助于案例#1。
  2. Levenshtein距离,看两条弦是如何不同的。不值得帮助。 3或更大的距离可能意味着这是同义词(例如Kyiv和m.Kiev)或完全不同的城市(例如Řím和Rimini,都是意大利,同一地区)。即使知道城市的国家也没多大帮助。
  3. 尝试使用城市词典+找到最近的词语(标准:相同的长度和相同的第一个字母,最小距离)。仍然有7%的情况我有错误。
  4. 使用Google放置API查找城市并将其返回到一个区域设置。仍然不起作用 - 布鲁塞尔和布鲁塞尔谷歌似乎不同,即使两者都位于比利时。
  5. 任何建议都将受到赞赏。

    P.S。你认为99%的情况下都有正确的城市映射吗?

1 个答案:

答案 0 :(得分:0)

老学校处理这个问题的方法是我们十年左右做的事情 - 创建一个包含查找的数据库表。假设我们可以确定可能的变化(并不总是一个好的假设,但是我们当时最好的假设),我们可以进行查找并仅存储“正确的”变化(如最常见和/或我们想要的那样) 。这涉及到预先做一些研究和步法,但可以产生相当好的结果。而且,如果数据库设置正确,您可以在数据中弹出更多变化。

99%会很难,因为变化是未知的。