【发布时间】:2012-03-26 05:57:10
【问题描述】:
我正在尝试使用他们的 quad 转储构建本地版本的 freebase 搜索 api。我想知道他们使用什么算法来匹配名称?例如,如果您访问 freebase.com 并输入“Hiking”,您会得到 p>
- 《阿波徒步协会》
- “徒步旅行”
- “徒步格鲁吉亚”
- “徒步弗吉尼亚的国家森林”
- “远足径”
【问题讨论】:
标签: search freebase string-search
我正在尝试使用他们的 quad 转储构建本地版本的 freebase 搜索 api。我想知道他们使用什么算法来匹配名称?例如,如果您访问 freebase.com 并输入“Hiking”,您会得到 p>
【问题讨论】:
标签: search freebase string-search
哇,很多猜测!我希望我不会因为不猜测而把水弄得太多。
自动完成框基本上由Freebase Suggest 提供动力,而Freebase Search 服务又为它提供动力。由搜索服务索引以进行匹配的字符串包括:1)名称,2)给定语言的所有别名,3)来自相关维基百科文章的链接锚文本和 4)标识符(Freebase 称为键),其中包括事物像维基百科的文章标题(和重定向)。
尚未披露各种事物的加权/提升方式,但您可以通过玩一会儿来感受事物。正如您从 API 中看到的那样,还可以按类型和其他标准进行过滤/加权,这可以根据上下文发挥作用。例如,如果您要向专辑添加唱片标签,则键入为唱片标签的主题将相对于没有的主题得到提升(但您仍然可以获取其他类型的内容以允许使用案例您的目标主题尚未应用适当的类型)。
这样您就可以稍微了解他们的服务是如何工作的,但是既然您还是从头开始,为什么不构建一个能够满足您需要的搜索服务呢?
顺便说一句,在谷歌之前,Metaweb 搜索实现是基于 Lucene 的,所以你肯定会比使用它作为起点做得更糟。部分详情可以阅读mailing list archive
【讨论】:
可能他们在选定字段上使用倒排索引,例如英文名称、别名和 Wikipedia sn-p 显示。在您的应用程序中,您可以使用诸如 Lucene 之类的东西来实现。
对于算法方面,我发现以下论文是一个很好的概述
Zobel and Moffat (2006): "Inverted Files for Text Search Engines"。
【讨论】:
很可能是按字典顺序排列的 trie。
【讨论】:
有许多可用的算法:Boyer-Moore、Smith-Waterman-Gotoh、Knuth Morriss-Pratt 等。您可能还想查看编辑距离算法,例如 Levenshtein。您需要尝试一下,看看哪个最适合您的目的。
此类算法的一个实现是谢菲尔德大学的 Simmetrics 库。
【讨论】: