一个Python程序包,它提供了用于匹配可以相互混淆但包含不同字符的单词的功能。
confusables的Python项目详细描述
易混淆
confusables是一个python包,它提供分析和匹配“出现”的单词的功能。 相同或相似,但使用不同的字符。
confusables使用unicode可混淆字符列表(https://www.unicode.org/Public/security/8.0.0/confusables.txt) 以及其他匹配字符的方法。
此包可用于检测使用任何意外字符通过筛选器的单词的任何应用程序 是必需的。这可能包括查找恶意假冒网站名称、分析或规范文本数据,甚至检测 试图通过亵渎过滤器。
安装
confusables可以通过pip使用
pip3 install confusables
用法
confusables模块中的函数关注于比较和查找可以被认为是“可混淆”的字符串。这意味着它们可以被人为地解释为同一个字符串。由于这涉及到人类的解释,“可混淆”的定义是松散的,在以后的版本中可能或多或少是严格的。
目前,confusables提供:is_confusable
,confusable_characters
,和confusable_regex
is_confusable(string1, string2)
接受两个字符串并输出这两个字符串是否“可混淆”。请记住,在某些情况下,单个字符可以与组合的两个字符混淆(例如是单个字符,!!是两个)
from confusables import is_confusable
print(is_confusable('rover', 'Ʀỏ?3ℛ'))
# prints True
confusable_characters(char)
接受一个字符并输出一个与之混淆的字符列表。在某些情况下,如上所述,单个字符可以与多个字符混淆,在这种情况下,这些字符将以字符串的形式包含在列表中。
from confusables import confusables_characters
print(confusable_characters('c'))
# prints ['ċ', 'ᴄ', '?', '?', '?', '?', 'ḉ', 'ℂ', 'Ꮯ', 'ć', 'c̦', '?', '?', '?', '?', 'Ⅽ', 'С', '?', 'c', 'ҫ', '?', '?', '?', '?', 'C', '?', 'Ç', '?', 'ç', 'Ⲥ', 'с', 'ⅽ', 'ĉ', '?', 'c', 'ℭ', 'ϲ', '?', 'Ϲ', '?', 'č', '?', 'Ĉ', '?', 'C', '?', '?', '?', 'ⲥ', '?', 'Ċ', 'C̦', 'ꮯ', '?', '?', '?', 'Č', 'ꓚ', '?', '?', '?', '?', 'Ć', '?', 'Ḉ']
confusable_regex(string, include_character_padding=False)
接受一个字符串并输出一个regex字符串,该字符串与输入字符串中可混淆的单词相匹配。
from confusables import confusable_regex
import re
regex_string = confusable_regex('bore', include_character_padding=True)
regex = re.compile(regex_string)
print(regex.search('Sometimes people say that life can be a ь.?.ř.ɜ, but I don\'t agree'))
# prints <_sre.SRE_Match object; span=(40, 47), match='ь.?.ř.ɜ'>
print(reg.search('Hopefully you don\'t get bored easily'))
# prints None (bored has the word bore as a subset, but it is not a word on it's own)
normalize(string, prioritize_alpha=False)
接受一个字符串并输出可能的“正常形式”列表。这意味着字符串中的字符将被转换为可混淆的ascii对应字符。prioritize_alpha
选项意味着输出的选项将优先考虑将字符转换为拉丁字母的字符。当需要自然语言时,建议使用此选项。
from confusables import normalize
print(normalize('Ʀỏ?3ℛ', prioritize_alpha=True))
# prints ['rov3r', 'rover']
print(normalize('Ʀỏ?3ℛ', prioritize_alpha=False))
# prints ['r0v3r', 'r0ver', 'ro\'v3r', 'ro\'ver', 'rov3r', 'rover']
关于Confusables
这个模块是我整理的,因为我对语言处理领域感兴趣。我希望建立它的功能,我非常乐意接受建议!
另外,我认为使用一些机器学习模型可以大大提高模块的效率,我目前正在寻找一些有用的数据集。如果你知道的话,请告诉我!
您可以通过任何正常的github方式联系我,或者使用我的电子邮件,woodgern@gmail.com