当前位置:网站首页>如何实现搜索引擎中的拼写纠错功能——思路
如何实现搜索引擎中的拼写纠错功能——思路
2022-06-29 23:51:00 【赵寒】
当用户在搜索框内,输入一个拼写错误的单词时,我们就拿这个单词跟词库中的单词一一进行比较,计算编辑距离,将编辑距离最小的单词,作为纠正之后的单词,提示给用户。
这就是拼写纠错最基本的原理。不过,真正用于商用的搜索引擎,拼写纠错功能显然不会就这么简单。一方面,单纯利用编辑距离来纠错,效果并不一定好;另一方面,词库中的数据量可能很大,搜索引擎每天要支持海量的搜索,所以对纠错的性能要求很高。
针对纠错效果不好的问题,我们有很多种优化思路,在这里介绍几种。
我们并不仅仅取出编辑距离最小的那个单词,而是取出编辑距离最小的 TOP 10,然后根据其他参数,决策选择哪个单词作为拼写纠错单词。比如使用搜索热门程度来决定哪个单词作为拼写纠错单词。
我们还可以用多种编辑距离计算方法,比如今天讲到的两种,然后分别编辑距离最小的 TOP 10,然后求交集,用交集的结果,再继续优化处理。
我们还可以通过统计用户的搜索日志,得到最常被拼错的单词列表,以及对应的拼写正确的单词。搜索引擎在拼写纠错的时候,首先在这个最常被拼错单词列表中查找。如果一旦找到,直接返回对应的正确的单词。这样纠错的效果非常好。
我们还有更加高级一点的做法,引入个性化因素。针对每个用户,维护这个用户特有的搜索喜好,也就是常用的搜索关键词。当用户输入错误的单词的时候,我们首先在这个用户常用的搜索关键词中,计算编辑距离,查找编辑距离最小的单词。
针对纠错性能方面,我们也有相应的优化方式。这里讲两种分治的优化思路。
如果纠错功能的 TPS 不高,我们可以部署多台机器,每台机器运行一个独立的纠错功能。当有一个纠错请求的时候,我们通过负载均衡,分配到其中一台机器,来计算编辑距离,得到纠错单词。
如果纠错系统的响应时间太长,也就是,每个纠错请求处理时间过长,我们可以将纠错的词库,分割到很多台机器。当有一个纠错请求的时候,我们就将这个拼写错误的单词,同时发送到这多台机器,让多台机器并行处理,分别得到编辑距离最小的单词,然后再比对合并,最终决定出一个最优的纠错单词。
真正的搜索引擎的拼写纠错优化,肯定不止我以上说的这么简单,但是万变不离其宗。掌握了核心原理,就是掌握了解决问题的方法,剩下就靠你自己的灵活运用和实战操练了。
边栏推荐
- Siemens low code version 9.14: meet different needs
- Shell positional parameter variables and predefined variables
- 6.28日刷题题解
- Head on Amway! Good looking and practical motor SolidWorks model material see here
- 穿越过后,她说多元宇宙真的存在
- @Scheduled annotation pit, I stepped on it for you
- Set up enterprise NTP time server
- 由GlideException: Failed DecodePath{DirectByteBuffer->GifDrawable->Drawable}引起的刨根问底
- 爬虫入门实战:斗鱼弹幕数据抓取,附送11节入门笔记
- 二叉搜索树 230. 二叉搜索树中第K小的元素 1038. 从二叉搜索树到更大和树
猜你喜欢

LC: maximum subarray and

Inspiration collection · evaluation of creative writing software: flomo, obsidian memo, napkin, flowus

云和恩墨盖国强,识别它、抓住它,在国产数据库沸腾以前

一步步教你在Edge浏览器上安装网风笔记

This simple little function saves 213 hours for our production research team in half a year

Digital collection of cultural relics, opening a new way of cultural inheritance

剑指 Offer 14- I. 剪绳子

Matlab exercises -- program control process exercise

这次的PMP考试(6月25日),有人欢喜有人忧,原因就在这...

雲和恩墨蓋國强,識別它、抓住它,在國產數據庫沸騰以前
随机推荐
Leetcode (633) -- sum of squares
西门子低代码平台通过Database Connector 连接Mysql 实现增删改查
[Shangshui Shuo series] day 8
Cacti最大监控数测试
This simple little function saves 213 hours for our production research team in half a year
After crossing, she said that the multiverse really exists
Why is JSX syntax so popular?
Is China Merchants Securities reliable? Is it safe to open a stock account?
Cacti settings for spin polling
MetaQ集群安裝測試
这次的PMP考试(6月25日),有人欢喜有人忧,原因就在这...
Zhongang Mining: Fluorite helps the construction and development of lithium battery in fluorine industry
Leetcode(76)——最小覆盖子串
机器学习:VC维的概念和用途
Which securities company is good for opening a mobile account? In addition, is it safe to open a mobile account?
How to view the CPU cores and threads in win11? Win11 view the tutorial of how many cores and threads the CPU is
Leetcode (680) -- verifying palindrome string II
穿越过后,她说多元宇宙真的存在
Ingenious application of golang generics to prevent null pointer errors of variables and structural fields
Unity splashimage scaling problem