2010-07-15 15 views
10

Tengo un juego de rol en línea que me tomo en serio. Últimamente he tenido problemas con los usuarios que hacen personajes falsos con nombres falsos, solo un montón de letras diferentes. Como Ghytjrhfsdjfnsdms, Yiiiedawdmnwe, Hhhhhhhhhhejejekk. Los obligo a cambiar los nombres pero se está volviendo demasiado. ¿Qué puedo hacer al respecto?comprueba si un nombre parece "humano"?

¿Debo de alguna manera comprobar que al menos no se puede usar más de 2 de la misma letra una al lado de la otra? Y también tal vez si contiene las vocales

+1

¿Qué idiomas admite? ¿Solo inglés? Porque si admite un idioma que no habla, ¿cómo sabrá si se trata de un nombre? un nombre en un idioma desconocido, o simplemente falso? –

+11

¡Buena suerte validando los nombres galés! :) – Unicron

+0

inglés solamente. jaja unicron – Jimy

Respuesta

1

This link podría ayudar. También es posible que pueda conectarlo a través de un motor de sintetizador de voz (posiblemente modificado) y analizar la cantidad de problemas que genera el discurso, sin generarlo realmente.

3

¿Qué pasaría si utilizara la API de búsqueda de Google para ver si el nombre arroja algún resultado?

+3

http://www.google.com/search?q=dfjkdfjkd – kennytm

+1

Eso vuelve a un nombre que parece "humano", en lugar de un lenguaje específico. –

+6

inteligente, pero no confiable. –

-3

Parece que va a necesitar una función de preg bastante compleja. No quiero tomar el tiempo para escribir uno para ti, ya que aprenderás más escribiendo por ti mismo, pero te ayudaré en el camino si publicas algunos intentos.

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

+1

Buena suerte con eso. Ya sea un código o una expresión regular, seguirá siendo imposible no tener falsos positivos. – wadesworld

+3

@Wade Williams: ¿es "imposible no tener falsos positivos" un triple negativo? –

+0

Sí, buen punto. Pero casi ninguna solución va a ser perfecta aquí. –

11

recomendaría concentrar su energía en la construcción de una interfaz de usuario que hace que sea clínicamente muerto fácil enumerar todos los nuevos nombres a un administrador y un grande y gordo "fuerza para cambiar el nombre de" mecanismo que minimiza los años de administración carga de trabajo, en lugar de tratar de definir las reglas increíblemente complejas y variadas que hacen un nombre (¡y programar una expresión regular para unirlas!).

Actualización - sin embargo, una cosa me viene a la mente: Second Life solía permitirme especificar libremente un nombre (tal vez revisen una base de datos de nombres, no sé) y luego les da un selección de unos cientos de apellidos predefinidos para elegir. Para un juego de rol en línea, eso ya puede ser suficiente.

+1

No una respuesta, pero una buena respuesta, sin embargo, –

+1

@Daniel 'yar' Rosenstark, no recibo tales comentarios. Quiero decir, solo si la gente simplemente responde la pregunta que se hace, ¿es * esa * una verdadera respuesta a una pregunta? Realmente espero que no. Quiero decir, si alguien pregunta cómo construir una casa con solo un martillo, si alguien trata de ayudar a esta persona en su camino con solo el martillo, o si alguien responde que no sería una buena idea usar solo un martillo y sugerir otras herramientas también? Espero que sea el último. –

+0

Agregando a esto, el principal problema con otros métodos es falso positivo, pero podría usar otro método para ordenar por "más probable es que sea falso". –

2

Tuve este problema también. Una manera fácil de resolverlo es forzar a los nombres de usuarios a validar contra una base de datos de nombres mundiales. Básicamente, tiene una base de datos en el back-end con unos cientos de miles de nombres y apellidos para ambos sexos, y hace coincidir su nombre.

Con un poco de búsqueda en google, puede encontrar muchas bases de datos de nombres.

2

¿Debo de alguna manera comprobar que al menos no se puede utilizar más de 2 de la misma letra una al lado de la otra? y también tal vez si contiene vocales

Si lo que desea es esto, que puede hacer:

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

Esto devolverá 1 si algo aparece tres veces seguidas o más.

6

se puede utilizar una aplicación metaphone y luego buscar patrones "no naturales":

http://www.php.net/manual/en/function.metaphone.php

Esta es la función de PHP para la generación de cadena metaphone. Pasa una cuerda y devuelve la representación fonética del texto. En teoría, podría pasar una gran cantidad de nombres "humanos" y luego almacenar una base de datos de combinaciones válidas de fonemas. Para probar un nombre cuestionable, solo vea si las combinaciones de fonemas están en la base de datos.

Espero que esto ayude!

+0

Esto parece más cercano a lo que el OP estaba buscando. Ya se ha documentado e implementado un algoritmo: http://www.sil.org/computing/lascruces.html – Kilanash

+0

Eso suena bien, sin embargo, ¿no está eso de alguna manera relacionado con la corrección ortográfica en PHP? Corrígeme si estoy equivocado. – tisuchi

3

Digo tomar el enfoque de @ Unicron, de fácil rechazo de administrador, pero en cada rechazo, agregue el nombre a una base de datos de nombres prohibidos. Es posible que pueda utilizar esta información para detectar ataques específicos y generar grandes cantidades de usuarios según patrones. Por supuesto, será muy difícil detectar los únicos.

+0

¡Buena idea para guardar precedentes! – Unicron

3

¿Limitaría la cantidad de consonantes o vocales en una fila y evitaría repetir la ayuda? Como una expresión regular:

if(preg_match('/[bcdfghjklmnpqrtsvwxyz]{4}|[aeiou]{4}|([a-z])\1{2}/i',$name)){ 
    //reject 
} 

Posiblemente usar iconv con ASCII//TRANSLIT si permite que los caracteres acentuados.

0

¿Qué opinas sobre la delegación de la responsabilidad de crear usuarios a una fuente de terceros (como Facebook, Twitter, OpenId ...)?

Hacer eso no resolverá su problema, pero será más trabajo para un usuario crear cuentas adicionales que (suponiendo que los usuarios son flojos, ya que la mayoría lo son) deberían desalentar la creación de usuarios "ficticios" adicionales.

1

Debe intentar implementar una versión modificada de Naive Bayes spam filter. Por ejemplo, en la detección normal de spam, usted calcula la probabilidad de que una palabra sea spam y usa probabilidades de palabras individuales para determinar si el mensaje completo es correo no deseado.

De manera similar, puede descargar una lista de palabras y calcular la probabilidad de que un par de letras pertenezca a una palabra real.

Por ejemplo, crear una tabla 26x26 decir, T. Deje que la 5ª fila represente la letra e y que la entrada T(5,1) sea la cantidad de veces que ea apareció en su lista de palabras. Una vez que haya terminado de contar, divida cada elemento en cada fila con la suma de la fila para que T(5,1) sea ahora el porcentaje de veces que ea aparezca en su lista de palabras en un par de letras que empiece por e.

Ahora, puede utilizar la probabilidad par individual (por ejemplo, en Jimy que habría {Ji, im, iy} para comprobar si Jimy es un nombre aceptable o no. Es probable que tenga que determinar la probabilidad derecho de umbral at, pero pruébelo --- no es tan difícil de implementar.

Cuestiones relacionadas