我有以下任务。我有银行照片列表,其中有城市,它是takene。我正在尝试编写导入它们的程序。问题是同一个城市的写法可能不同:
- 简单案例:REYKJAV Í K或Reykjav 我 k。可以通过不变的不区分大小写的比较来解决。
- 更难的案例:Lviv或Lvov - 可以使用Levenstein距离来解决。对于这种情况,如果城市从相同的字母开始并且距离小于或等于1 - 我们可以匹配。
- 更难的案例:布鲁塞尔vs布鲁塞尔。
- 只是另一个:m.Wroclaw(读作弗罗茨瓦夫市)
最后,我需要将所有这些城市的“synonims”映射到一些共同点。
因此,我的问题是 - 你能说明如何实现这一目标吗?
我尝试了什么:
- 不区分大小写的比较+转换为不变量 - 有助于案例#1。
- Levenshtein距离,看两条弦是如何不同的。不值得帮助。 3或更大的距离可能意味着这是同义词(例如Kyiv和m.Kiev)或完全不同的城市(例如Řím和Rimini,都是意大利,同一地区)。即使知道城市的国家也没多大帮助。
- 尝试使用城市词典+找到最近的词语(标准:相同的长度和相同的第一个字母,最小距离)。仍然有7%的情况我有错误。
- 使用Google放置API查找城市并将其返回到一个区域设置。仍然不起作用 - 布鲁塞尔和布鲁塞尔谷歌似乎不同,即使两者都位于比利时。
醇>
任何建议都将受到赞赏。
P.S。你认为99%的情况下都有正确的城市映射吗?