一个Python程序包,它提供了用于匹配可以相互混淆但包含不同字符的单词的功能。

confusables的Python项目详细描述


Build StatusPyPI version

易混淆

confusables是一个python包,它提供分析和匹配“出现”的单词的功能。 相同或相似,但使用不同的字符。

confusables使用unicode可混淆字符列表(https://www.unicode.org/Public/security/8.0.0/confusables.txt) 以及其他匹配字符的方法。

此包可用于检测使用任何意外字符通过筛选器的单词的任何应用程序 是必需的。这可能包括查找恶意假冒网站名称、分析或规范文本数据,甚至检测 试图通过亵渎过滤器。

安装

confusables可以通过pip使用 pip3 install confusables

用法

confusables模块中的函数关注于比较和查找可以被认为是“可混淆”的字符串。这意味着它们可以被人为地解释为同一个字符串。由于这涉及到人类的解释,“可混淆”的定义是松散的,在以后的版本中可能或多或少是严格的。

目前,confusables提供:is_confusableconfusable_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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java流/下载文件,无需在Spring Boot中保留内存   kotlin/java是否有类似TryParse()的东西?   java Spring引导找不到用户类型的属性ID   java Spring 2到Spring 3的迁移:一个控制器用于多个视图   java包含多个程序包名为“安卓”的库。支持图样可提取'   java spring JPA是否支持自定义值框架?   java转义出基于文本字段的搜索栏   java AAPT:错误:未找到样式属性“安卓:attr/WindowsPlashCreenBackground”   java从文本文件中读取纬度和经度   java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询   尝试使用Dialogflow上的Webhook动态给出响应时,java获取Webhook响应错误(206)   如何在java中替换匹配的字符串?   java模拟数学的最大价值。随机的   java Spring RestTemplate GET请求未给出正确响应   春爪哇。lang.IllegalArgumentException   java系统。load()永远不会发生   java剪辑循环不工作   java如何从maven构建中删除staxapi   java ThreadPoolExecutor的排队行为是否可以自定义,以更喜欢创建新线程而不是排队?