当我们在Collins词典中输入“voilent”的时候,会有如下提示:
当我们在Google中搜索“voilent”的时候,也会有如下提示:
Collins和Google是如何做到的呢?它是怎么知道我们把i和o的位置弄反了呢?
当我们输入一个词,而这个词不存在于Google的倒排索引或者Collins的词典中时,我们就可以假设用户输入可能有误,接着我们通过算法找出一个和用户的输入最相似的词推荐给用户,这个找出和用户输入最相似的词的算法有很多种,最常用的有编辑距离算法(Edit Distance),因为这个算法是俄罗斯科学家Vladimir Levenshtein在1965年提出的,所以编辑距离(Edit Distance)又叫做Levenshtein距离。
编辑距离算法是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,允许的编辑操作包括将一个字符替换成另一个字符,增加一个字符,删除一个字符。
例如将kitten转成sitting:
sitten (k→s)将一个字符k替换成另一个字符s
sittin (e→i) 将一个字符e替换成另一个字符i
sitting (→g) 增加一个字符g
所以编辑距离为3,word分词提供了编辑距离算法的Java代码实现,同时superword项目也演示了编辑距离算法对于单词记忆的辅助作用。
下面我们看看中文的情况,当我们在Google搜索“热挨”的时候,Google在倒排索引中找不到“热挨”这个词,于是它猜测我们真正想搜索的是“热爱”,那么Google是怎么猜测到我们的意图的呢?
工作原理和上面介绍的英文词比较相似,只是算法不一样,如果把编辑距离算法应用到这里,效果会很差,那么怎么办呢?
解决方法是利用汉语的同音词原理,先把“热挨”转换为拼音“reai”,然后找出所有拼音为“reai”的双字词,在按照词的出现频率取频率最大者“热爱”。
更多资料:
How to Write a Spelling Corrector
Using the Web for Language Independent Spellchecking and Autocorrection
相关推荐
网站用户密码猜测工具1.0版.rar
其中的fapai()函数本人也是在网上看到的,后来花了点时间才把它搞完整了,调试可通过...要的分多了,不好意思啦
编写一个Java应用程序,实现如下功能: ...用户从键盘输入自己的猜测; 程序返回提示信息,提示信息分别是“猜大了”、“猜小了”、和“猜对了”; 用户可根据提示信息再次输入猜测,直到提示信息是“猜对了”。
网站用户密码猜测工具
在每次猜测4个数字组合的尝试结束时,计算机将提供反馈信息,指示用户是否正确猜测了一个数字,或/和用户是否正确猜测了一个数字和数字。 玩家必须在10次尝试中赢得正确的数字组合才能赢得比赛。 技术领域 React JS...
编程序,让计算机来猜测用户“暗记”的某张扑克牌:计算机从一副扑克牌(54张)中任意抽出27张,摆放在不同的三行上(每行9张),用户“暗记”某张纸牌,而后告诉计算机所“暗记”的那张纸牌处于哪一行中;...
猜数字 是一款游戏,使用户有机会猜测1到20之间的正确数字。用户有10次尝试猜测正确的数字。 屏幕
深度学习对于口令猜测的应用,将人工智能与口令破解结合起来,应用最新算法进行口令猜测
AI团队率先做的尝试是在一些特定场景下猜测用户意图,进行意图相关推荐,如住酒店用户,地铁上用户等,这是算法可以做的事情,那测试在这个过程中可以做些什么呢?算法验证相对滞后,有什么可以先行的呢?用户意图...
综合来看,实验效果得到了很的提升)实现细节该算法的实现主要包括三个部分:口令集预处理、口令集训练、口令猜测,使的编程语为python3.7,具体细节如下所:口令
基于神经网络的定向口令猜测研究.pdf
这是一个用户友好的应用程序,可以自由定制以满足您的需求。这个游戏的目的是提供一个愉快和有趣的体验。当你开始游戏时,你会得到一个隐藏的单词,让你通过输入字母来猜测。每个错误的猜测都会导致一个人的一部分被...
这是一个用户友好的应用程序,可以自由定制以满足您的需求。此应用程序的目的是提供一种有趣的游戏,您需要猜测口袋妖怪的隐藏轮廓。该应用程序还使用一个 API,用于获取我们在此程序中使用的所有口袋妖怪的图像数据...
#include const int MIN_NUM=1; const int MAX_NUM=1000; class guessGame { public: void play(); protected: int m_nHi; int m_nLo; int m_nGuess; int m_nHint; void startGame();...
# 猜测次数 i = 1 # """将user与computer比较,告诉user猜大了还是猜小了""" while user != computer: if user computer and user != 0: user = int(input("你猜大了,再猜,【如果你不想猜了,输入0】")) if...
采用Servlet实现猜数游戏。游戏的界面如下:用户在点击“开始新游戏”后,服务器随机生成1000...如果相等则提示用户猜对了,如果猜测的数字大于正确的数字,则提示“猜大了”,否则提示“猜小了”,并显示猜测的次数。
UDP穿越Symmetric NAT(对称型NAT)的端口猜测方法的几篇文章
利用jsp编写,这是课堂程序!程序的围观设计不考虑,只是注重代码。
(2)设计一个猜四字成语游戏类Game,可以随机产生成语的解释信息,显示到控制台,等待用户输入猜测到的成语。 (3)用户作答后,系统可以判断用户输入的成语内容是否正确,如果正确,继续一下;如果不正确,让用户继续...