【发布时间】:2012-02-29 00:20:42
【问题描述】:
我正在为一个用 Python 编写的网络论坛过滤脏话。
作为其中的一部分,我正在尝试编写一个函数,该函数接受一个单词,并返回该单词的所有可能的模拟拼写,这些拼写使用视觉上相似的字符代替特定的字母(例如 s†å©køv€rƒ| øw)。
我预计随着时间的推移,我将不得不扩展此列表以涵盖人们的创造力,但互联网上的任何地方是否有一个列表可供我用作起点?
【问题讨论】:
-
我无法回答这个问题,但我不会使用返回一个单词所有可能的模拟拼写的函数。这可能非常多。相反,我会在查找坏词列表之前对帖子中的每个单词进行规范化,即在查找之前将“s†å©køv€rƒ|øw”转换为“stackoverflow”。
-
@PaulD.Waite:不,我不会。它不能解决问题,它只是一个旁注。您仍然需要有关字符映射的数据,这是这里的主要问题。 (而且我认为你的问题是完全有效的,而且很切题。)
-
有一些脚本和程序可以使单词变得更简单(切换大小写并将 o 替换为 0,3 替换为 e,等等。我先看看这些。
-
这个想法突然出现在我的脑海中——它既没有经过彻底的分析,也没有经过任何方式的测试。但是,如何 1. 选择一种字体 2. 创建所有字形的位图渲染 3. 定义位图的相似性度量(简单的一个:在标准边界框内的所有网格位置上相等与不同位值的比例)。 4. 计算字符对的相似度矩阵 5. 对字形进行相应的聚类 6. 为每个聚类选择一个代表(理想情况下,这些代表将作为 a-zA-Z0-9 出现)。然后过滤相当于将每个字符映射到正确的集群代表和字典查找。
标签: python unicode glyph profanity