我如何让python找到看起来类似于坏单词但不一定是英语中正确单词的单词?

2024-05-13 20:02:39 发布

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

我正在用python制作一个网络欺凌检测discord机器人,但遗憾的是,有些人可能会绕开传统英语,用不同的方式拼写一个坏单词,比如带3g的n字或不带c的f字。有些人可能会使用太多不同的脏话。我怎样才能让python找到它们

我试过pyenchant,但它没有达到我想要的效果。如果我提出建议(“种族歧视性诽谤”),“笨蛋”在数组中。我似乎找不到任何有效的方法

我必须单独考虑每一种可能性,并把所有可能性加在一本字典里吗?(我希望不是。)


Tags: 方法网络字典方式机器人数组传统可能性
3条回答

您可以尝试在正在调节的字符串中循环,并将其放入数组中。 例如,如果您想将“foo”列入黑名单

x=[["f","o","o"],[" "], ["f","o","o","o"]]

然后计算每个单词中的字母,以计算每个单词中每个字母的数量:

y = [["f":"1", "o":"2"], [" ":"1"], ["f":"1", "o":"3"]]

然后看到y[2]与y[0](被禁止的单词)非常相似。 虽然这种方法并不完美,但它只是一个开始

另一件需要注意的事情是使用一个神经语言解释器,它可以检测一个单词是否以贬义的方式使用。不久前,谷歌设计了其中一款

另一个答案是没有一个机器人是完美的。 你可能不得不把这些常见的拼写错误列入黑名单。 然而,如果你能100%准确地使用自动方法,那将是非常棒的

不幸的是,拼写检查(针对不同语言)本身仍然是人们研究的一个开放问题,因此没有完美的解决方案,更不用说用户有意插入一些“错误”的情况了

幸运的是,从概念上讲,人们可以有意识地改变输入的单词,以获得一个新单词,该单词与最初的单词相似,足以被其他人理解。例如,坏演员可能会试图:

  • 将一些字母复制多次
  • 在字符之间添加一些分隔符(例如“-”、“”)
  • 删除一些字符(例如不带“c”的f字)
  • 倒装
  • 潜在的其他人

我的建议是,如果你不想钻研机器学习,那么一开始就要保持简单。作为一种可能的方法,您可以尝试:

  1. 手动创建一组小写坏单词,并删除其重复字母(例如“killer”->;“kiler”)

  2. 手动/自动向该集合中添加这些单词的变体,其中缺少一个或多个仍然易于理解的字母(例如“kiler”+->;“kill”)

  3. 提取消息中的单词(例如通过message_str.split()

  4. 对于每个单词及其反向版本:

    a。移除可能的分离器(例如“-”和“”)

    b。将其转换为小写,并删除连续的重复字母

    c。检查单词的这种新形式是否存在于集合中,如果存在,则检查它或整个消息

此解决方案缺少对由一个或多个空格/换行符分隔的字符的保护(例如,“killer”->;“kil-er”)。 根据消息的长度(我认为它们在聊天室中通常是短的),您可以尝试用删除的空白区来考虑初始消息的每个子串,而不是在步骤3中由空白间隔符检测到的每个单词。这将花费更多的时间,因为生成每个子字符串将花费单独的O(消息长度^2)时间

这不一定是python的工作,而是它的生态系统。您可能希望研究自然语言理解算法,并找到一种适合您特定需求的方法。这需要一些时间和进一步的专业知识来解决

你可以从pytorch开始,它对我的学习有很大帮助。他们关于文本的文档:https://pytorch.org/text/stable/index.html

另外,我建议你看看kaggle,有几个数据科学挑战有奖,可以解决你想要解决的相同任务。 https://www.kaggle.com/c/jigsaw-multilingual-toxic-comment-classification

这些竞赛通常有公开的入门笔记本,让您开始使用自己的实现

相关问题 更多 >