在Python中识别视觉上相似的字符串

2024-10-03 02:47:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个python项目,在这个项目中我需要过滤亵渎的单词,而且我已经有了一个过滤器。唯一的问题是,如果用户将一个字符切换为视觉上相似的字符(例如helloh311o),则过滤器不会拾取它。有没有什么方法,我可以找到检测这些词没有硬编码的每一个组合?你知道吗


Tags: 项目方法用户过滤器hello编码视觉字符
3条回答

也许可以在视觉上相似的人物和他们所能表现的东西之间建立一种关系

dict = {'3': 'e', '1': 'l', '0': 'o'} #etc....

然后你可以用这个来测试你的数据库里的禁词。 e、 g

你知道吗输入:he11你知道吗

如果任何字符在dict中有条目

dict['h']#不存在

dict['e']#不存在

dict['1']='l'

dict['1']='l'

把这些放在一起形成一个词,然后搜索你的禁入名单。我不知道这是不是最快的方法,但这是“a”的方法。你知道吗

我很想看看别人怎么想。你知道吗

*免责声明:我已经学习了一年左右的Perl,现在开始学习Python。当我有时间的时候。这很难做到。你知道吗

线性替换

你会想要一些适合创新的正字法。首先,用其他字符作为通配符,将字母字符与你的禁词词典进行模式匹配。例如,您的示例将被翻译为“h…o”,这与您提出的禁忌词“hello”相匹配。你知道吗

接下来,您将把非字母字符与替换字典进行比较,允许通用通配符代表任何内容。例如,星号、连字符和句点可以代表任何东西;“4”和“@”可以代表“A”,依此类推。但是,您将从禁忌词的强度来进行检查,而不是从生成所有的可能性来进行检查:翻译是相反的。你知道吗

你会有点模棱两可,因为有些字符代表多个字母。”@“当你变得狡猾时,可以用‘O’来代替。还要注意的是,并不是所有的字母都在您通常的集合中:您需要处理货币符号(欧元、日元和英镑都是从字母派生的),以及碰巧与拉丁字母相似的外国字母。你知道吗

多字符替换

只处理与禁忌词长度相同的词。你也能处理缩写吗?“h-bomb”的形式有很多组合,其中被禁止的单词只出现在第一个字母中:效果是亵渎的,但匹配起来更困难,特别是用scharfes-s(德语)替换“b”,用希伯来语或希腊语字符替换“m”,用任何圆形的“o”组成整个字体。你知道吗

上下文

还有一个问题是,有些词在某种语境中完全合法,但在俚语语境中却是亵渎的。你是否也在计划匹配短语,或者分析句子中的触发词?你知道吗

培训解决方案

如果你需要一个全面的解决方案,可以考虑训练一个神经网络,用你标记为“好”和“禁忌”的短语和单词,让它运行一天。这可以减轻你肩上的大量适应工作,增强模型并不是一个难题:添加新的区分文本,从你结束的地方继续训练。你知道吗

l331sp33ch翻译成leetspeech并在距离内应用一个简单的levens,怎么样?(您需要先pip install editdistance

import editdistance
try:
    from string import maketrans # python 2
except:
    maketrans = str.maketrans # python 3

t = maketrans("01345", "oleas")
editdistance.eval("h3110".translate(t), 'hello')

结果0

相关问题 更多 >