Я пытаюсь построить модель Python, которая могла бы классифицировать имена учетных записей как законные, так и бессмысленные.В данном конкретном случае использование заглавных букв не имеет значения, поскольку некоторые допустимые имена учетных записей могут состоять из букв верхнего или нижнего регистра.
Отказ от ответственности: это просто внутреннее исследование / эксперимент, и никаких реальных действий в отношении результатов классификатора предприниматься не будет.
В частности, есть 2 возможные характеристики, которыеможет показывать имя учетной записи как подозрительное, бессмысленное или и то и другое:
Странное / случайное написание имени или имени состоит из чисто или в основном чисел.Примеры имен учетных записей, которые соответствуют этим критериям: 128, 127, h4rugz4sx383a6n64hpo, tt, t66, t65, asdfds .
Имя имеет 2 компонента (предположим,что ни одно имя никогда не будет иметь более 2 компонентов), а написание и произношение этих 2 компонентов очень похожи.Примеры имен учетных записей, которые соответствуют этим критериям: Jala Haja, Hata Yaha, Faja Kaja .
Если имя учетной записи соответствует обоим вышеуказанным критериям (т. Е. 'asdfs lsdfs ',' 332 333 ') это также следует считать подозрительным.
С другой стороны, законное имя учетной записи не обязательно должно содержать имя и фамилию.Обычно это имена из популярных языков, таких как римский / латинский (например, испанский, немецкий, португальский, французский, английский), китайский и японский.
Примеры допустимых имен учетных записей включают (эти имена составлены, но отражают аналогичные стили допустимых имен учетных записей в реальном мире): Майкл, Сара, Хосе Кольменарес, Димитар, Хосе Рафаэль, Морган, ЭдуардоМедина, Луис Р. Мендес, Хикару, СЕЛЕНИЯ, Чжан Мин, Сютинг Лю, Чэнь Чжэн .
Я видел несколько схожих вопросов о Stackoverflow, в котором спрашивались способы обнаружения бессмысленных текстов.Но они не соответствуют моей ситуации, потому что законные тексты и слова действительно имеют значения, тогда как человеческие имена обычно не имеют.Я также хочу иметь возможность сделать это только на основе имен учетных записей и ничего больше.
Прямо сейчас мой сценарий позаботится о том, чтобы найти вторую характеристику подозрительных имен учетных записей (схожие компоненты в названии), используя пакет Fuzzy Wuzzy в Python и используя 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
Результат был надежным для того, для чего был разработан сценарий, но я также хочу иметь возможность выявлять бессмысленные имена учетных записей с 1-й характеристикой (странное / случайное написание)или имя состоит из чисто или в основном чисел).Пока что я не нашел решения этого вопроса.
Кто-нибудь может помочь?Любые отзывы / предложения будут с благодарностью!