我指的是当用户在Google中键入搜索词时用于给出查询建议的算法。
我主要感兴趣的是: 1.最重要的结果(最可能的查询,而不是任何匹配的结果) 2.匹配子串3.模糊匹配
我知道你可以使用Trie或广义trie来查找匹配,但它不能满足上述要求……
之前问过的类似问题here
发布于 2011-07-16 00:24:20
有关(heh)令人惊叹的模糊/部分字符串匹配算法,请查看Damn Cool算法:
这些不会取代尝试,而是阻止尝试中的暴力查找-这仍然是一个巨大的胜利。接下来,您可能想要一种限制trie大小的方法:
最后,您希望尽可能地防止查找...
苹果数据缓存查找结果:如果用户点击任何搜索结果,您可以非常快速地提供这些结果,然后异步获取完整的部分/模糊lookup.
发布于 2012-01-27 05:00:15
我只想说...这个问题的一个很好的解决方案是合并不止一个三元搜索树。Ngram和Shingles (短语)是必需的。还需要检测词边界错误。“地狱o”应该是“你好”...“白袜子”应该是“白袜子”--这些都是预处理步骤。如果你没有对数据进行适当的预处理,你将不会得到有价值的搜索结果。三元搜索树是一个很有用的组件,用于确定单词是什么,以及当输入的单词在索引中不是有效单词时实现相关单词猜测。
google算法执行短语建议和更正。google算法也有一些上下文的概念...如果你搜索的第一个单词是与天气相关的,你把它们组合在一起,"weatherforcst“、"monsoonfrcst”和"deskfrcst“--我的猜测是在幕后,基于遇到的第一个单词,建议中的排名正在改变--天气和天气是相关的单词,因此forecast get在Did- you -Mean猜测中排名很高。
单词分词(Ngram),短语术语(shingles),单词邻近度(单词聚类索引),三元搜索树(单词查找)。
发布于 2013-07-01 17:31:05
谷歌的确切算法尚不清楚,但it is said的工作原理是通过统计分析用户的输入。一种不适合大多数情况的方法。更常见的情况是使用以下方法之一实现自动完成:
看看completely,这是一个Java autocomplete库,它实现了后面的一些概念。
https://stackoverflow.com/questions/2901831
复制相似问题