是否有与英文字母类似的字符列表?

时间:2012-02-29 00:20:43

标签: python unicode glyph profanity

对于用Python编写的网络论坛,我正在亵渎亵渎过滤。

作为其中的一部分,我正在尝试编写一个带有单词的函数,并返回该单词的所有可能的模拟拼写,使用视觉上相似的字符代替特定字母(例如,s†å©køv€rƒ| OW)。

我希望我不得不随着时间的推移扩大这个列表,以涵盖人们的创造力,但是在互联网上的任何地方都有一个可以作为起点使用的列表吗?

4 个答案:

答案 0 :(得分:35)

这可能比你需要的要深得多,但还不足以覆盖你的用例,但Unicode联盟必须处理对国际化域名的攻击,并提出了这个同形异义词列表(与相同或类似的渲染):

http://www.unicode.org/Public/security/latest/confusables.txt

至少可以作为一个起点。

答案 1 :(得分:12)

http://en.wikipedia.org/wiki/Letterlike_Symbols

它不那么全面,但更容易理解。

答案 2 :(得分:4)

我创建了一个python类来完成这个,基于Robin的“confusables”的unicode链接

https://github.com/wanderingstan/Confusables

例如,“Hello”将扩展为以下一组正则表达式字符类:

[H\H\ℋ\ℌ\ℍ\\\\\\\\\\\Η\\\\\\Ⲏ\Н\Ꮋ\ᕼ\ꓧ\\Ⱨ\Ң\Ħ\Ӊ\Ӈ] [e\℮\e\ℯ\ⅇ\\\\\\\\\\\\\ꬲ\е\ҽ\ɇ\ҿ] [l\‎\|\∣\⏽\│1\‎\۱\\‎\\\\\I\I\Ⅰ\ℐ\ℑ\\\\\\\\\\\\Ɩ\l\ⅼ\ℓ\\\\\\\\\\\\\\ǀ\Ι\\\\\\Ⲓ\І\Ӏ\‎\‎\‎\‎\‎\‎\‎\‎\ⵏ\ᛁ\ꓲ\\\\‎\‎\ł\ɭ\Ɨ\ƚ\ɫ\‎\‎\‎\‎\ŀ\Ŀ\ᒷ\\⒈\‎\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\‎\\⒒\Ⅲ\\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙] [l\‎\|\∣\⏽\│1\‎\۱\\‎\\\\\I\I\Ⅰ\ℐ\ℑ\\\\\\\\\\\\Ɩ\l\ⅼ\ℓ\\\\\\\\\\\\\\ǀ\Ι\\\\\\Ⲓ\І\Ӏ\‎\‎\‎\‎\‎\‎\‎\‎\ⵏ\ᛁ\ꓲ\\\\‎\‎\ł\ɭ\Ɨ\ƚ\ɫ\‎\‎\‎\‎\ŀ\Ŀ\ᒷ\\⒈\‎\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\‎\\⒒\Ⅲ\\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙] [o\ం\ಂ\ം\ං\०\੦\૦\௦\౦\೦\൦\๐\໐\၀\‎\۵\o\ℴ\\\\\\\\\\\\\ᴏ\ᴑ\ꬽ\ο\\\\\\σ\\\\\\ⲟ\о\ჿ\օ\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\ഠ\ဝ\\\\\‎\ø\ꬾ\ɵ\ꝋ\ө\ѳ\ꮎ\ꮻ\ꭴ\‎\ơ\œ\ɶ\∞\ꝏ\ꚙ\ൟ\တ]

此正则表达式将匹配“℮10”

答案 3 :(得分:0)

我本身没有解决方案,但我有一些想法。

@ collapsar在评论中的方法原则上听起来不错,但我认为您想要使用现成的OCR库而不是尝试自己分析图像。为了制作图像,我会在DejaVu系列中使用类似字体的字体,因为它可以很好地覆盖相对模糊的Unicode字符。

另一种获取数据的简单方法是查看“预组合”字符的分解,如“à”;如果一个角色可以分解为一个或多个组合章节,后面跟一个看起来像英文字母的基本字符,它本身可能看起来像一个英文字母。

对于像这样的问题,没有什么比这更好的数据了。你可以通过抓取正确的网络论坛收集很多人们做出的人物替换的好例子。然后你可以使用这个程序学习新的程序:首先,找到主要包含你可以识别的字符的“单词”,以及一些你不能识别的单词。从单词中创建一个正则表达式,将所有内容转换为常规字母,并用“。”替换其他所有内容。然后将你的正则表达式与字典匹配,如果你只得到一个匹配,那么你就可以找到一些非常好的候选人来代表未知字符。 (我实际上不会使用正则表达式来搜索字典,但你明白了。)

您可以使用Google的n-gram语料库(http://storage.googleapis.com/books/ngrams/books/datasetsv2.html)代替挖掘论坛,但如果它包含您需要的伪词,我现在无法立即检查。

相关问题