10
votes

Vérifiez si un nom semble "humain"?

J'ai un jeu de RPG en ligne que je prends au sérieux. Dernièrement, j'ai eu un problème avec les utilisateurs qui fabriquent des caractères faux avec des noms de faux noms, juste un tas de lettres différentes. Comme Ghytjrhfsdjfnsdms, YiiiedawdMnwe, HHHHHHHHHHHHEJEKK. Je les forces à changer de nom mais ça devient trop. Que puis-je faire à ce sujet?

Puis-je vérifier en quelque sorte que au moins vous ne pouvez pas utiliser plus de 2 de la même lettre à côté de l'autre ?? Et peut-être aussi s'il contient des voyelles


6 commentaires

Quelles langues soutiennent-tu? Que l'anglais? Parce que si vous soutenez une langue que vous ne parlez pas, alors comment saurez-vous si un nom est un nom dans une langue inconnue ou simplement faux?


Bonne chance validant les noms gallois! :)


Ghytjrhfsdjfnsdms = Troll, YiiiedAwdMnwe = elf, hhhhhhhhhhejejekk = gobelin


>> Vous ne pouvez pas utiliser plus de 2 de la même lettre à côté de l'autre - problématique avec des noms parfaitement bons comme Allan, Abbie, Phillip, etc.


@Mark: Tout irait bien puisqu'il a dit> 2 caractères côte à côte, pas> = 2


Vous devriez essayer un classificateur naïf Bayes similaire à celui utilisé pour filtrer le spam --- Il est facile à mettre en œuvre et à tester.


11 Réponses :


1
votes

Ce lien pourrait aider. Vous pourriez également être capable de le brancher via un moteur de synthétiseur de parole (éventuellement modifié) et d'analyser la quantité de problèmes qu'il a de générer le discours sans le générer.


0 commentaires

3
votes

Et si vous utilisez l'API de recherche Google pour voir si le nom renvoie des résultats?


5 commentaires

Cela revient à un nom semblant "humain" - plutôt que d'une langue spécifique.


intelligent, mais pas fiable.


Cela semble être une idée sensée, si seulement pour souligner les noms les plus ridicules d'une interface utilisateur administrative


@Kenny: Oh non, je suis piégé dans la récursion; Le quatrième résultat de cette recherche Google est cette page!


Cela ne fonctionnera pas ... Regardez l'exemple de Kenny ... Je veux dire, "Fffffffff" retourne un tas de pages.



-3
votes

Il semble que vous alliez avoir besoin d'une fonction de prégrette assez complexe. Je ne veux pas prendre le temps d'en écrire un pour vous, car vous en apprendrez plus d'écrire vous-même, mais j'aiderai le long du processus si vous postez des tentatives.

http://php.net/manual/fr/function.preg -match.php


3 commentaires

Bonne chance avec ça. Que ce soit du code ou une expression régulière, il restera toujours impossible de ne pas avoir de faux positifs.


@ Williams - est "impossible de ne pas avoir de faux positifs" un triple négatif?


Ouais bon point. Mais presque aucune solution ne sera parfaite ici.



11
votes

Je recommanderais de concentrer votre énergie sur la construction d'une interface utilisateur qui le rend cerveau-mort facile à répertorier tous les nouveaux noms à un administrateur et à une grosse graisse "Force à renommer" Mécanisme qui minimise la charge de travail de l'administrateur, plutôt que d'essayer de Définissez les règles incroyablement complexes et variées qui font un nom (et programmez une expression régulière pour les associer!).

Mise à jour - une chose qui vient à l'esprit, bien que: la deuxième vie utilisée pour vous permettre de spécifier librement un prénom (peut-être qu'ils vérifient une base de données de prénoms, je ne sais pas) et vous donne ensuite une sélection de quelques centaines de noms prédéfinis à choisir. Pour un RPG en ligne, cela peut déjà suffire.


8 commentaires

@Daniel 'Yar' RosenStark, je n'ai pas de telles remarques. Je veux dire, seulement si les gens répondent simplement à la question posée, est cette une vraie réponse à une question? J'espère vraiment pas. Je veux dire, si quelqu'un demande comment construire une maison avec juste un marteau, il faut essayer d'aider cette personne sur son chemin avec juste le marteau, ou si une réponse à laquelle elle pourrait ne pas être une bonne idée d'utiliser uniquement un marteau et suggérer d'autres outils aussi? J'espère bien que c'est ce dernier.


Ajout à cela, le principal problème avec d'autres méthodes est faux positifs, mais vous pouvez utiliser une autre méthode pour trier par "le plus susceptible d'être faux".


@Bart K. Merci. :) Mais je ne pense pas que @Daniel attaque la réponse, tout à fait contraire. Et strictement parlant, ma réponse est sans doute pas ce que l'OP a demandé - même si nous pensons que c'est pour le meilleur.


@Bart K., j'étais facetieux, surtout. J'étais également l'un des premiers upaveurs de la réponse de @ Unicron (totalement uneversifiable, mais vrai :)). Parfois, cependant, nous ne sommes évidemment pas le cas de l'OP), nous sommes confinés à un espace de solution étroite, mais vous avez raison. La mise à jour de la réponse est bonne aussi.


@Unicron, non, je ne voulais pas avoir attaqué votre réponse. Je viens de voir que cela se produisait plusieurs fois: quelqu'un obtenant une réponse qui n'a pas abordé la question de la question de 100%, puis de répondre à la réponse que ce n'était pas vraiment une réponse (qui n'est pas sens, IMO).


@Daniel, ouais, désolé, je suis probablement venu un peu dur. C'est probablement parce que j'ai vu le "pas une réponse" sans la partie "mais une bonne réponse néanmoins" et a finalement décidé de donner une réponse (que je n'ai pas fait dans le passé ...). :)


... et j'ai finalement voulu utiliser mon Maison-Building-analogie , bien sûr. :)


@Bart K. Pas de soucis, nous essayons tous d'utiliser autant d'analogies fraîches que possible, le cas échéant.



2
votes

J'ai aussi eu cette question. Un moyen facile de résoudre est de forcer les noms d'utilisateur à valider contre une base de données de noms mondiaux. Essentiellement, vous avez une base de données sur le backend avec quelques centaines de milliers de prénoms et de noms pour les genders et faire correspondre leur nom.

Avec un peu de recherche sur Google, vous pouvez trouver de nombreuses bases de données de noms.


0 commentaires

2
votes

Puis-je vérifier en quelque sorte que au moins vous ne pouvez pas utiliser plus de 2 de la même lettre à côté de l'autre ?? et peut-être aussi s'il contient des voyelles p>

Si vous voulez juste cela, vous pouvez faire: P>

preg_match('/(.)\\1\\1/i', $name);

0 commentaires

6
votes

Vous pouvez utiliser une implémentation de métaphone, puis rechercher des modèles "non naturels":

http://www.php.net/manual/fr/function .mettaphone.php

Ceci est la fonction PHP pour la génération de chaînes de métaphone. Vous passez dans une chaîne et il renvoie la représentation phonétique du texte. Vous pouvez, en théorie, passer un grand nombre de noms "humains", puis stocker une base de données de combinaisons valides de phonèmes. Pour tester un nom discutable, voir simplement si les combinaisons de phonèmes sont dans la base de données.

J'espère que cela vous aidera!


2 commentaires

Cela semble plus proche de ce que l'OP cherchait. Un algorithme a déjà été documenté et mis en œuvre: Sil.org/computing/lascruces.html


Cela semble bon, mais n'est-ce pas si en quelque sorte liée à la correction d'orthographe dans PHP? Corrigez-moi si je me trompe.



3
votes

Je dis Prenez l'approche de Take @ Unicron, du rejet d'administration facile, mais sur chaque rejet, ajoutez le nom à une base de données de noms interdits. Vous pourrez peut-être utiliser ces données pour détecter des attaques spécifiques génération de nombreux utilisateurs basés sur des modèles. Sera bien sûr très difficile à détecter des uniques.


1 commentaires

Bonne idée stockant les précédents!



4
votes

limiterait la quantité de consonnes ou de voyelles dans une rangée et empêchant l'aide répétée? En tant que regex: xxx

user éventuellement utiliser iconv avec ascii // translit si vous autorisez des caractères accentués.


1 commentaires

Je ne peux pas descendre mon propre poste, mais à mon esprit, cela semble être une mauvaise solution 11 ans en ligne. Ne faites pas ce genre d'hypothèses sur les noms.



0
votes

Que pensez-vous de déléguer la responsabilité de créer des utilisateurs à une source tierce partie (comme Facebook, Twitter, OpenID ...)?

Faire cela ne résoudra pas votre problème, mais il sera plus utile d'un utilisateur de créer des comptes supplémentaires - qui (en supposant que les utilisateurs sont paresseux, car la plupart doivent décourager la création d'utilisateurs «factices» supplémentaires. < / p>


0 commentaires

1
votes

Vous devriez essayer de mettre en œuvre une version modifiée d'un filtre de spam naïfe Bayes . Par exemple, dans la détection normale du spam, vous calculez la probabilité d'un mot étant du spam et utilisez des probabilités de mots individuelles pour déterminer si tout le message est spam.

De même, vous pouvez télécharger une liste de mots et calculer la probabilité qu'une paire de lettres appartient à un mot réel.

E.g., Créez un 26x26 Table Dites, t . Soit la 5ème rangée représenter la lettre E et la saisie t (5,1) Soyez le nombre de fois ea apparu dans votre liste de mots. Une fois que vous avez terminé compter, divisez chaque élément de chaque ligne avec la somme de la ligne de sorte que t (5,1) est désormais le pourcentage de fois ea apparaît dans Votre liste de mots dans une paire de lettres commençant par E .

Maintenant, vous pouvez utiliser la probabilité de paire individuelle (par exemple dans Jimy qui serait { JI , im , iy < / Code>} Pour vérifier si Jimy est un nom acceptable ou non. Vous devrez probablement déterminer la bonne probabilité de seuiller, mais essayez-la - ce n'est pas si difficile à mettre en œuvre.


0 commentaires