<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
博主今天分享一个简单但是核心的信息检索算法——倒排索引,几乎所有的信息检索引擎都会使用。希望这个知识对爱学习的你有所帮助,喜欢的话就点个赞吧。
倒排索引英文名是Inverted index,翻译过来就是倒排索引。但是,我们不要被这个中文名唬住了。这个名字看上去的意思是把元素倒过来排序再获取索引,但是实际上的意思并不是这样。
假如我们有n篇文档,现在要输入关键词进行搜索。如果这个关键词是"test",那么正常的思路是遍历每个文档的所有单词,如果含有"test",就获取这个文档的id。但是,这样太费时间了,如果我们在检索之前,就把每个word和含有这个word的文档id储存下来,那么检索时我们只要找到对应的word,就可以获取含有该word的所有文档的id。这就是倒排索引的核心思想,相当于通过提前建立索引表的方式,把text->word的过程颠倒一下,改成word->text,体会一下。
我们举个例子,现在有以下五个文档,用json的格式储存。
讯享网
则建立的倒排索引表的结构如下:
这样我们在输入关键词搜索时,只需获取每个关键词对应的索引,再做一个交集,可以得到含有这些关键词的文档的id。
这是一个用python模仿倒排索引的简单示例,三个文件inverted_index.py(实现倒排索引),data.json(储存文档数据),index.json(储存索引表)。
讯享网
上述代码注释写的很明白,我们就不具体阐了。假如我们使用文章之前提到的五个文档,代码的输出结果为{‘3’},说明id为3的文档,同时含有“an”和“science”。
代码时间复杂度仍然需要优化,仅供参考。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/158778.html