2

我正在尝试使用他们的 quad 转储构建本地版本的 freebase 搜索 api。我想知道他们使用什么算法来匹配名称?例如,如果您访问 freebase.com 并输入“Hiking”,您会得到

  • “阿波徒步协会”
  • “远足”
  • “徒步格鲁吉亚”
  • “徒步弗吉尼亚的国家森林”
  • “爬山径”
4

4 回答 4

7

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

自动完成框基本上由Freebase Suggest提供支持,而后者又由Freebase Search服务提供支持。由搜索服务索引以进行匹配的字符串包括:1)名称,2)给定语言的所有别名,3)来自相关维基百科文章的链接锚文本和 4)标识符(Freebase 称为键),其中包括事物像维基百科的文章标题(和重定向)。

尚未披露各种事物的加权/提升方式,但您可以通过玩一会儿来感受事物。正如您从 API 中看到的,还有按类型和其他标准进行过滤/加权的能力,这可以根据上下文发挥作用。例如,如果您将唱片标签添加到专辑中,则键入为唱片标签的主题将相对于没有的主题得到提升(但您仍然可以获取其他类型的内容以允许用例您的目标主题尚未应用适当的类型)。

这样您就可以稍微了解他们的服务是如何工作的,但是既然您还是从头开始,为什么不构建一个可以满足您需求的搜索服务呢?

顺便说一句,在谷歌之前,Metaweb 搜索实现是基于 Lucene 的,所以你肯定会比使用它作为你的起点做得更糟。您可以阅读邮件列表存档中的一些详细信息

于 2012-03-26T22:47:32.523 回答
2

可能他们在所选字段上使用倒排索引,例如英文名称、别名和显示的 Wikipedia 片段。在您的应用程序中,您可以使用诸如 Lucene 之类的东西来实现这一点。

对于算法方面,我发现以下论文是一个很好的概述

Zobel 和 Moffat (2006):“文本搜索引擎的反转文件”

于 2012-03-26T08:31:06.057 回答
1

很可能是按字典顺序排列的 trie。

于 2012-03-26T06:00:26.080 回答
1

有许多可用的算法:Boyer-Moore、Smith-Waterman-Gotoh、Knuth Morriss-Pratt等。您可能还想查看编辑距离算法,例如 Levenshtein。您将需要四处寻找最适合您的目的。

此类算法的一个实现是谢菲尔德大学的Simmetrics库。

于 2012-03-26T06:48:16.380 回答