跳转到主要内容

一个提供匹配功能以区分彼此的字符不同但相似的单词的Python包

项目描述

Build Status PyPI version

Confusables

Confusables是一个Python包,它提供分析并匹配看似相同或相似但使用不同字符的单词的功能。

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

此包可用于任何需要检测使用任何意外字符以通过过滤器的应用程序。这可能包括查找恶意仿冒网站名称、分析或规范化文本数据,甚至检测试图绕过脏话过滤器的尝试。

安装

Confusables可以通过pip使用pip3 install confusables安装

用法

confusables模块中的函数主要集中在比较和查找可被视为“易混淆”的字符串。这意味着它们可以被人类解释为相同的字符串。由于这涉及到人类解释,因此“易混淆”的定义是宽泛的,在以后的版本中可能更为严格或宽松。

目前,confusables提供:is_confusableconfusable_charactersconfusable_regex

is_confusable(string1, string2)接受两个字符串并输出两个字符串是否“易混淆”。请注意,在某些情况下,单个字符可能与其他两个字符组合混淆(例如,‼是一个字符,!!是两个)。

from confusables import is_confusable

print(is_confusable('rover', 'Ʀỏ𝕍3ℛ'))
# prints True

confusable_characters(char)接受一个字符并输出一个与它混淆的字符列表。在某些情况下,如上所述,单个字符可以与其他多个字符混淆,在这种情况下,这些字符将以字符串形式包含在列表中。

from confusables import confusable_characters

print(confusable_characters('c'))
# prints ['ċ', 'ᴄ', '𝔠', '𝒄', '𝗰', '𝗖', 'ḉ', 'ℂ', 'Ꮯ', 'ć', 'c̦', '𝑐', '𝓬', '𝚌', '𐌂', 'Ⅽ', 'С', '𝘤', 'c', 'ҫ', '𝖈', '🝌', '𝖢', '𝐂', 'C', '𝓒', 'Ç', '𝘾', 'ç', 'Ⲥ', 'с', 'ⅽ', 'ĉ', '𐔜', 'c', 'ℭ', 'ϲ', '𑣩', 'Ϲ', '𝕮', 'č', '𐊢', 'Ĉ', '𝑪', 'C', '𑣲', '𐐕', '𐐽', 'ⲥ', '𝐶', 'Ċ', 'C̦', 'ꮯ', '𝒞', '𝕔', '𝘊', 'Č', 'ꓚ', '𝒸', '𝐜', '𝙲', '𝖼', 'Ć', '𝙘', 'Ḉ']

confusable_regex(string, include_character_padding=False) 函数接受一个字符串,并输出一个正则表达式字符串,用于匹配与输入字符串混淆的单词。

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='ь.𝞂.ř.ɜ'>

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']

更新到最新的 Unicode 混淆版本

如果您发现此包的最新版本中包含过时的 Unicode 官方 confusables.txt 版本,为什么不提交一个 PR 来更新它呢!

首先,找出 Unicode 混淆的最新版本。然后,运行

make update VERSION=X.Y.Z

接下来,运行

make parse

就这样!提交您的更改并创建一个拉取请求。

关于混淆字符

这个模块是我根据我对语言处理领域的兴趣制作的。我希望扩展其功能,并且我很乐意接受建议!

此外,我认为可以使用一些机器学习模型极大地提高该模块的有效性,我目前正在寻找一些有用的数据集。如果您知道任何,请告诉我!

您可以通过任何正常的 GitHub 方式或使用我的电子邮件 woodgern@gmail.com 联系我。

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源代码分发

confusables-1.2.0.tar.gz (262.8 kB 查看散列)

上传时间 源代码

构建分发

confusables-1.2.0-py3-none-any.whl (268.5 kB 查看散列)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面