人们在我的网站上搜索,其中一些搜索是这样的:
tapoktrpasawe
qweasd qwa as
aıe qwo ıak kqw
qwe qwe qwe a
我的问题是,有没有什么方法可以检测到与上面类似的字符串?
我想不可能100%检测到它们,但任何解决方案都将受到欢迎:)
编辑:我的意思是“乱码搜索”.例如,有些人搜索字符串像“asdqweasdqw”,“paykaprkg”,“iwepr wepr ow”在我的搜索引擎,我想检测乱码搜索.
不管搜索结果是0还是别的什么,我都不能用这种逻辑。
一些新的品牌或产品将被忽略,如果我会考虑“常规的话”。
谢谢你的帮忙
9条答案
按热度按时间eoigrqb61#
你可以从一堆英语文本中建立一个字符到字符转换的模型,例如,你可以发现t后面有h的情况有多普遍(很常见)。在英语中,你期望在“q”之后,你会得到一个“u”。如果你得到一个“q”后面跟着“u”以外的东西,这种情况发生的概率很低,因此,它应该是相当惊人的。规范化表中的计数,这样你就有了一个概率。然后对于一个查询,遍历矩阵并计算你所采取的转换的乘积。然后通过查询的长度进行规范化。当数字很低时,你可能有一个乱码查询(或其他语言的东西)。
如果你有一堆查询日志,你可能首先建立一个通用英语文本的模型,然后在模型训练阶段对你自己的查询进行加权。
有关背景信息,请阅读Markov Chains。
编辑,我在这里用Python实现了这个:
https://github.com/rrenaud/Gibberish-Detector
buggedcom用PHP重写了它:
https://github.com/buggedcom/Gibberish-Detector-PHP
aor9mmx12#
你可以用what Stackoverflow does来计算字符串的熵。
当然,这只是SO用于确定低质量答案的许多启发式方法之一,不应依赖于100%准确。
ltqd579y3#
假设你的意思是jibberish搜索...这将是更多的麻烦比它的价值.你提供了一个搜索功能,让他们使用它,但他们喜欢.我相信有一些算法在那里检测奇怪的字符组,但它可能会更多的资源/劳动密集型比只是简单地返回没有结果.
gzjq41n44#
我必须解决一个与源代码挖掘项目密切相关的问题,尽管这个包是用Python而不是PHP编写的,这里似乎值得一提,以防它仍然有用。(用于“Nonsense String Evaluator”),并且其旨在确定在源代码挖掘期间提取的字符串是否可能是类/函数/变量/等。标识符或随机乱码。它在真实的文本上也能很好地工作,而不仅仅是程序标识符。Nostril使用n-gram(类似于the answer by Rob Neuhaus中的乱码检测器)与自定义TF-IDF评分函数相结合。它经过预训练,并且可以开箱即用。
示例:下面的代码
将生成以下输出:
这个项目在GitHub上,我欢迎大家的贡献。
0pizxfdo5#
我认为你可以像检测“常规单词”一样检测这些字符串。这只是模式匹配,不是吗?
至于用户为什么要搜索这些字符串,这才是更大的问题。你也许可以用其他方法来阻止这些胡言乱语的搜索。例如,如果人们(或脚本)正在寻找的是垃圾评论短语,那么就安装一个验证码。
编辑:另一个解释输入的方法是稍微限制它。允许每10秒左右搜索一次。(我记得在论坛软件上看到过这个,在SO上也有很多地方。)这会减少一次又一次搜索 sdfpjheroptuhdfj 的乐趣,同时不会干扰用户搜索和查找他们的东西。
r7knjye26#
正如一些人评论的那样,在谷歌中没有关于Tapoktrpasawe或putjbtghguhjjjanika的搜索结果(当然,现在有了)所以如果你有办法通过API进行快速的谷歌搜索,你可以扔掉任何没有谷歌结果的搜索词,也不是你的产品名称。为什么你想这样做是另一个问题-你是想为你的搜索库保存精力吗?让你对“热门搜索词”的手工审查更有意义吗?或者你只是对互联网上一些人的莫名其妙的行为感到沮丧吗?如果是后者,我的建议是让它去吧,即使有办法阻止它。一些其他的怪事也会沿着。
wmomyfyw7#
简短回答- Jibberish搜索
概率语言模型工作。
逻辑
一个单词是由一系列的字符组成的,如果两个字符出现的频率更高,如果我们把单词中两个相邻字符出现的频率加起来,并把跨阈值极限(英语单词)加起来,就说它是一个正确的英语单词。简单地说,这个逻辑就是著名的马尔可夫链。
链接
对于数学的胡言乱语和更好的理解,请参阅视频https://www.youtube.com/watch?v=l15C8UJu17s。谢谢!!
yuvru6vn8#
如果搜索的是产品,你可以缓存它们的名称或代码,在查询数据库之前对照列表进行检查。另外,如果你的网站是为英语用户服务的,你可以建立一个字典,里面包含英语中不使用的字符串,比如qwkfagsd。这会比没有字典更耗费资源。
9rnv2umw9#
如果你像我一样,只是想要一个快速而肮脏的PHP解决方案,这里有一个:
它只计算5个最罕见的字母,5个最常见的字母,并确定比例是否过高。