Dans le but d’identifier [possibles] noms d’utilisateur générés par un bot.
Supposons que vous ayez un nom d’utilisateur comme “bilbomoothof” … cela peut être un non-sens, mais il contient toujours des sons prononçables et apparaît donc comme étant généré par l’homme.
J’accepte qu’il ait pu être généré aléatoirement à partir d’un dictionnaire de syllabes ou de parties de mots, mais supposons un instant que le bot en question soit un peu foutu.
Les solutions applicables en PHP / MySQL sont les plus appréciées.
Je suppose que vous pourriez penser à quelque chose comme ça si vous pouviez vous limiter à des sons prononcés en anglais . Pour moi (je suis français), des mots comme szczepan ou wawrzyniec sont imprononçables et ont certainement un certain caractère aléatoire.
Mais ce sont en réalité des prénoms polonais (signifiant steven et lawrence ) …
Je suis d’accord avec Mac. Mais plus que cela, les gens ont parfois un nom d’utilisateur qui n’est pas prononçable, comme qwerty ou rtfmorleave.
Pourquoi s’embêter avec ça?
Mais plus que ça, aucun bots n’utilise zetztzgsd comme nom d’utilisateur , ils ont un dictionnaire de realname, un pseudonyme possible, etc. Je pense donc que ce serait une perte de temps pour vous.
obsolète et faux, mais je ne supprime pas à cause des commentaires>
Recherchez l’parsing n-gram. Il est utilisé avec succès pour détecter automatiquement le langage du texte et fonctionne étonnamment bien, même sur des textes très courts.
La démo en ligne (qui n’est plus en ligne) a reconnu «bilbomoothof» en anglais et «sdfgbhm342r3f» en népalais. Il renvoie probablement toujours la meilleure correspondance, même si elle est très mauvaise. Je pense que vous pouvez l’entraîner à discerner entre «prononçable» et «aléatoire».
Utilisez simplement CAPTCHA dans le cadre du processus d’inscription.
Vous ne pouvez jamais distinguer les noms d’utilisateurs réels des noms d’utilisateurs créés par des robots, sans énerver vos utilisateurs.
Vous allez bloquer les utilisateurs avec des noms bizarres ou non anglais, ce qui les irritera, et les bots continueront à essayer jusqu’à ce qu’ils attrapent un bon nom d’utilisateur (du dictionnaire, ou d’autres sources – c’est très sympa , en passant! ).
EDIT: Vous recherchez la prévention plutôt que l’parsing après coup?
La solution consiste à laisser quelqu’un d’autre gérer les identités de l’utilisateur pour vous. Par exemple, vous pouvez utiliser une petite liste de fournisseurs OpenID (comme SO), une connexion Facebook ou les deux. Vous saurez que les utilisateurs sont réels et qu’ils ont résolu au moins un CAPTCHA.
EDIT: une autre idée
Recherchez la chaîne dans Google et vérifiez le nombre de correspondances trouvées. Ne devrait pas être votre seul outil, mais c’est aussi un bon indicateur. Les chaînes aléatoires, bien sûr, devraient avoir peu ou pas de correspondances.
Au sumt de ma tête, vous pourriez chercher des syllabes, en utilisant soundex . C’est la direction que j’explorerais, basée sur l’hypothèse qu’un mot prononçable a au moins une syllabe.
EDIT: Voici une fonction pour compter les syllabes:
function count_syllables($word) { $subsyl = Array( 'cial' ,'tia' ,'cius' ,'cious' ,'giu' ,'ion' ,'iou' ,'sia$' ,'.ely$' ); $addsyl = Array( 'ia' ,'riet' ,'dien' ,'iu' ,'io' ,'ii' ,'[aeiouym]bl$' ,'[aeiou]{3}' ,'^mc' ,'ism$' ,'([^aeiouy])\1l$' ,'[^l]lien' ,'^coa[dglx].' ,'[^gq]ua[^auieo]' ,'dnt$' ); // Based on Greg Fast's Perl module Lingua::EN::Syllables $word = preg_replace('/[^az]/is', '', strtolower($word)); $word_parts = preg_split('/[^aeiouy]+/', $word); foreach ($word_parts as $key => $value) { if ($value <> '') { $valid_word_parts[] = $value; } } $syllables = 0; // Thanks to Joe Kovar for correcting a bug in the following lines foreach ($subsyl as $syl) { $syllables -= preg_match('~'.$syl.'~', $word); } foreach ($addsyl as $syl) { $syllables += preg_match('~'.$syl.'~', $word); } if (strlen($word) == 1) { $syllables++; } $syllables += count($valid_word_parts); $syllables = ($syllables == 0) ? 1 : $syllables; return $syllables; }
De ce lien très intéressant:
Malheureusement, cela ne peut pas être fait, puisque la fonction de complexité de Kolmogorov n’est pas calculable, vous ne pouvez donc pas générer un tel algorithme à moins d’appliquer certaines règles au domaine des noms d’utilisateurs possibles. difficile à faire.
PS: Après avoir posté cette réponse, je suis tombé sur un service qui donnait une idée de la ressortingction de domaine de nom d’utilisateur, laisser aux utilisateurs utiliser la boîte aux lettres de domaine public bien connu comme noms d’utilisateur.
Vous pouvez utiliser un réseau neuronal pour évaluer si le pseudonyme ressemble à un surnom en langage naturel.
Assemblez deux ensembles de données: l’un des surnoms valides et l’un des pseudo-générés. Entraînez un simple réseau neuronal à couche cachée rétro-progressive avec les valeurs de caractères comme entrées. Le neural network apprendra à distinguer les chaînes telles que “zrgssgbt” et “zargbyt”, puisque ces dernières ont des consonnes et des voyelles mélangées.
Il est important d’utiliser des exemples réels pour obtenir un bon discriminateur.
Je ne connais pas les algorithmes existants pour ce problème, mais je pense qu’il peut être attaqué de l’une des manières suivantes:
En russe, nous avons des syllabes interdites, comme ГЙ
, а ou Ь
après une voyelle et ainsi de suite.
Cependant, les robots de spam utilisent simplement la firebase database des noms, c’est pourquoi ma boîte de réception de spam contient des noms étranges que vous ne pouvez rencontrer que dans les livres d’histoire.
Je m’attends à ce que l’anglais ait aussi des histogrammes de dissortingbution de syllabes (comme ETAOIN SHRDLU
, mais pour des syllabes de deux lettres ou même de trois lettres), et avoir une densité critique de syllabes basse fréquence dans un nom est certainement un signe.
Notez que de nombreux grands sites suggèrent des noms d’utilisateur comme [first init] [init méd] [nom] [nombre]. Les utilisateurs portent ensuite ces noms d’utilisateurs sur d’autres sites, et les trois premières lettres ne sont certainement pas prononçables.