自然语言处理:用英语查找猥亵?

鉴于一组单词标记为词性,我想找到那些在主流英语中猥亵的词。 我怎么能这样做? 我应该制作一个巨大的列表,并检查列表中是否存在任何内容? 我是否应该尝试使用正则表达式捕获单个根上的一堆变体?

如果它更容易,我不想过滤掉,只是为了得到一个计数。 因此,如果有一些误报,那就不是世界末日,只要有一个或多或少均匀过度夸大的利率。

这句话我想把我的长颈长颈鹿贴在蓬松的白色兔子淫秽上吗?

我会列出一个巨大的清单。

当应用于自然语言时,正则表达式具有失火的问题 – 尤其是英语具有一定的例外情况。

请注意,任何这样的NLP逻辑都会受到“字符替换”的攻击:

例如,我可以将“你好”写成“he11o”,用One代替L’s。 与猥亵相同。 因此,虽然没有完美的答案,但“坏词”的“黑名单”方法可能有效。 注意误报(我会针对一本大书运行我的黑名单,看看会出现什么)

这种filter的一个问题是他们倾向于标记完全正确的英语城镇名称,如斯肯索普。 虽然可以通过检查整个单词而不是部分来减少这一点,然后您会发现人们通过将他们的冒犯性词语与相邻文本合并来利用它们。

这取决于你的文本来源是什么,但我会选择某种已建立且经过validation的模式匹配算法,例如使用Trie 。

使用WordNet中内置的morphy lemmatizer,然后确定引理是否是淫秽。 这将解决不同动词forms,复数forms等问题……

我会提倡一大堆简单的正则表达式。 比变体列表小,但不试图在任何给定的表达式中捕获除字母替代之外的任何内容:例如“f [u _- @#$%^&*。] ck”。

您想使用贝叶斯分析来解决此问题。 贝叶斯概率是垃圾邮件filter用于检测电子邮件收件箱中的垃圾邮件/网络钓鱼邮件的强大技术。 您可以训练您的分析引擎,以便它可以随着时间的推移而改进。 检测合法电子邮件与垃圾邮件的能力与您遇到的问题完全相同。

以下是一些有用的链接:

垃圾邮件计划 – 第一个使用贝叶斯分析来打击垃圾邮件的提案。

数据挖掘(ppt) – 这是我的一位同事写的。

Classifier4J – 用Java编写的文本分类器库(它们适用于所有语言,但您使用Java标记了此问题)。

有些网络服务用英语做这种事情。

我确定还有其他人,但我之前在一个项目中使用过WebPurify正是出于这个原因。

在Melissa Data,当我的经理,马萨诸塞州研究与开发总监和我重构了一个针对关系数据库的数据分析器时,我们根据Levinshtein距离匹配的数量来计算亵渎,其中插入,删除和替换的数量可由用户调整以便允许拼写错误,日语等同于英语,复数,以及空白和非空白标点符号。 我们通过仅查看n乘n矩阵的对角带来加速Levinshtein距离计算的运行时间。