【发布时间】:2018-11-12 13:37:22
【问题描述】:
我正在尝试构建可以将帐户名称分类为合法或乱码的 Python 模型。在这种特殊情况下,大写并不重要,因为一些合法的帐户名称可能由全部大写或全部小写字母组成。
免责声明:这只是一项内部研究/实验,不会对分类结果采取任何实际行动。
在我看来,有 2 个可能的特征可以将帐户名称显示为可疑、乱码或两者兼有:
名称或名称中的奇怪/随机拼写由纯数字或大部分数字组成。符合这些条件的帐户名称示例如下:128、127、h4rugz4sx383a6n64hpo、tt、t66、t65、asdfds。
该名称有 2 个组成部分(假设没有一个名称将包含超过 2 个组成部分),并且这两个组成部分的拼写和发音非常相似。符合这些条件的帐户名称示例如下:Jala Haja、Hata Yaha、Faja Kaja。
如果帐户名称同时满足上述两个条件(即“asdfs lsdfs”、“332 333”),它也应被视为可疑。
另一方面,合法的帐户名不需要同时包含名字和姓氏。它们通常是来自流行语言的名称,例如罗马/拉丁语(即西班牙语、德语、葡萄牙语、法语、英语)、中文和日语。
合法帐户名称的示例包括(这些名称是虚构的,但确实反映了现实世界中合法帐户名称的相似风格):Michael、sara、jose colmenares、Dimitar、Jose Rafael、Morgan、Eduardo Medina、Luis R. Mendez, Hikaru, SELENIA, Zhang Ming, Xuting Liu, Chen Zhengstrong>.
我在 Stackoverflow 上看到了一些稍微相似的问题,这些问题询问了检测乱码文本的方法。但是这些不适合我的情况,因为合法的文本和单词实际上是有意义的,而人名通常没有。我还希望能够仅基于帐户名称而不是其他任何东西来做到这一点。
现在,我的脚本负责使用 Python 的 Fuzzy Wuzzy 包查找可疑帐户名称(名称中的相似组件)的第二个特征,并使用 50% 作为相似度阈值。脚本如下:
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import pandas as pd
import numpy as np
accounts = pd.read_csv('dataset_with_names.csv', encoding = 'ISO-8859-1', sep=None, engine='python').replace(np.nan, 'blank', regex=True)
pd.options.mode.chained_assignment = None
accounts.columns = ['name', 'email', 'akon_id', 'acct_creation_date', 'first_time_city', 'first_time_ip', 'label']
accounts['name_simplified']=accounts['name'].str.replace('[^\w\s]','')
accounts['name_simplified']=accounts['name_simplified'].str.lower()
sim_name = []
for index, row in accounts.iterrows():
if ' ' in row['name_simplified']:
row['name_simplified']=row['name_simplified'].split()
if len(row['name_simplified']) > 1:
#print(row['name_simplified'])
if fuzz.ratio(row['name_simplified'][0], row['name_simplified'][1]) >= 50:
sim_name.append('True')
else:
sim_name.append('False')
else:
sim_name.append('False')
else:
sim_name.append('False')
accounts['are_name_components_similar'] = sim_name
结果对于脚本的设计目的来说是可靠的,但我还希望能够显示具有第一个特征(奇怪/随机拼写或名称由纯数字或大部分数字组成)的乱码帐户名称。到目前为止,我还没有找到解决方案。
有人可以帮忙吗?任何反馈/建议将不胜感激!
【问题讨论】:
标签: python machine-learning classification nltk fuzzywuzzy