5

对地名数据进行位置消歧的最佳方法是什么?

地名搜索有一些评分算法,但他们不开源,我不确定它们是否非常复杂。(即soma, ca它返回Soma lake in Canada甚至没有维基百科的文章,而不是非常流行Soma Neirbohood in san francisco

我在谷歌学者中也找到了一些作品,但它们似乎很肤浅,与我的启发式相似,比如用某物(log(population) + 1000*hasWikipedia(article)+ isCity100+isCapital(10))评分。

我的旅游文章领域,所以我的评分功能应该提供最可能的旅游地点(城市、名胜古迹(迪斯尼乐园、Colleseum、大本钟))。

你知道这个领域的任何重要文章,或者谷歌地图、雅虎、必应甚至地名在生产中使用的算法吗?

4

1 回答 1

3

@yura,这不是您要找的东西,但我认为没有任何聪明的算法能够始终如一地消除诸如“soma ca”之类的查询是指旧金山的 Soma 还是加拿大的 Soma Lake。问题不在于您的算法不够复杂;问题是查询“soma ca”中没有足够的信息。

我不知道如何清楚地表达它,但这里有一个信息论的事情。这就像随机数据无法无损压缩的方式:输入中没有足够的信息来计算所需的输出。

即使人类要手动解释您的查询,他们也不一定会理解“soma ca”应该是 SF 中的 Soma。也许对你来说,像“ca”这样的两个字母的缩写“自然”是指美国的一个州而不是一个外国,但这种选择根本上没有“正确”的地方,而且不能用纯逻辑推导出来。log(population)这是一个任意的、特定于域的临时规则,就像您提到的临时启发式规则一样。

一些可能的“解决方案”(除了设计可以读取用户思想的心灵感应计算机):

  1. 为用户提供每个查询可能匹配的列表。跟踪他们选择的查询,当其他用户稍后键入相同的查询时,按受欢迎程度对结果进行排序。
  2. 或者,一旦您收集了大量有关查询结果受欢迎程度的数据,您甚至可以使用机器学习算法挖掘数据,并从中获得更好的启发式方法。
  3. 或者,在将应用程序投入生产使用之前,您可以首先编译一组虚假查询,以及您认为您的算法应该为每个此类查询产生的结果。然后在上面使用你的机器学习算法。
  4. 编译一组虚假查询和所需响应,或者从真实用户的选择中获取数据,并使用该数据来衡量您手动设计和编码的排名启发式算法的准确性。不断发明新的启发式方法,直到找到一种在测试数据集上达到高精度的方法。
于 2012-07-03T14:08:46.973 回答