2012-03-26 15 views
2

我试图建立一个本地版本的freebase搜索API使用他们的四个转储。我想知道他们用什么算法来匹配名字?举个例子,如果你去freebase.com,键入“徒步旅行”你freebase使用什么算法来匹配名称?

  • “APO徒步旅行协会”
  • “徒步旅行”
  • “徒步旅行格鲁吉亚”
  • “徒步旅行弗吉尼亚州的国家森林”
  • ‘登山步道’

回答

7

哇,很多猜测!我希望不要因为猜测太多而把水弄得过多。

该自动完成框基本上由Freebase Suggest供电,其依次由Freebase Search服务供电。由搜索服务进行匹配索引的字符串包括:1)名称; 2)给定语言的所有别名; 3)链接来自相关维基百科文章的锚文本; 4)标识符(由Freebase称为密钥)如维基百科文章标题(和重定向)。

各种各样的东西是如何被加权/提升的还没有被公开,但是你可以通过一段时间玩它来获得感觉。从API中可以看到,还可以按类型和其他标准进行过滤/加权,这可以根据上下文发挥作用。例如,如果要将唱片标签添加到唱片集中,那么键入为唱片标签的主题将相对于不是的东西获得提升(但您仍可以获取其他类型的东西以允许用例你的目标主题还没有应用适当的类型)。

因此,您可以了解他们的服务如何工作,但为什么不建立一个搜索服务,因为您无论如何都要从头开始,所以不需要执行什么操作?

顺便说一句,Google之前的Metaweb搜索实现基于Lucene的顶层,所以你肯定会比以此为出发点做得更差。您可以阅读mailing list archive的一些详细信息

1

最有可能的是用字典顺序一个线索。

+0

对于目标不是第一个单词的情况,请问这种方法是否有效?例如:“徒步旅行”是第二个词的“Apo徒步旅行社团” – stackOverlord 2012-03-26 06:06:58

+0

嗯,我想要订购它是不同于词典编排的东西。就像谷歌有自己的订单结果标准。这更像是一种语义搜索。 – 2012-03-26 06:12:53

1

有很多算法可供使用:Boyer-Moore,Smith-Waterman-Gotoh,Knuth Morriss-Pratt等。您可能还想检查编辑距离算法,如Levenshtein。你需要四处游览,看看哪个最适合你的目的。

这种算法的实现是谢菲尔德大学的Simmetrics图书馆。