Un problema en un sitio web como este es que a menudo no sabes si estás hablando con un hombre o una mujer. Sin embargo, se le ocurrió una técnica simple de PNL que puede utilizar para determinar el género del escritor de un texto.
Teoría
Alrededor del 38.1% de las letras usadas en inglés son vocales [a, e, i, o, u] (ver Referencias a continuación, y
NO es una vocal en este caso). Por lo tanto, definiremos cualquier palabra que tenga al menos 40% de vocales como palabra femenina , y cualquier palabra que tenga menos de 40% de vocales como palabra masculina .
Más allá de esta definición, también podemos encontrar la masculinidad o feminidad de una palabra. Sea C el número de consonantes en la palabra y V sea el número de vocales:
- Si una palabra es femenina, es feminidad
1.5*V/(C+1)
. - Si una palabra es masculina, es masculinidad
C/(1.5*V+1)
.
Por ejemplo, la palabra catch
es masculina. Su masculinidad es 4/(1.5*1+1) = 1.6
. La palabra phone
es femenina. Su feminidad es 1.5*2/(3+1) = .75
.
Algoritmo
Para determinar el género del escritor de un texto, tomamos la suma de la masculinidad de todas las palabras masculinas (Σ M ) y la suma de la feminidad de todas las palabras femeninas (Σ F ). Si Σ M > Σ F , hemos determinado que el escritor es un hombre. De lo contrario, hemos determinado que el escritor es una mujer.
Nivel de confianza
Finalmente, necesitamos un nivel de confianza. Si ha determinado que el escritor es mujer, su nivel de confianza es . Si ha determinado que el escritor es hombre, el nivel de confianza es .2*ΣF/(ΣF+ΣM)-1
2*ΣM/(ΣF+ΣM)-1
Entrada
La entrada es un texto en inglés que incluye puntuación. Todas las palabras están separadas por espacios (no tiene que preocuparse por nuevas líneas o espacios adicionales). Algunas palabras tienen caracteres que no son letras, que debes ignorar (como "Eres"). Si encuentra una palabra que no contiene letras (como "5" o "!!!") simplemente ignórela. Cada entrada contendrá al menos una palabra utilizable.
Salida
Debe generar una M o una F según el género que crea que es el escritor, seguido de su nivel de confianza.
Ejemplos
There's a snake in my boot.
- Género + masculinidad / feminidad de cada palabra:
[M1.0,F1.5,F.75,F.75,M2.0,F1.0]
- Σ M = 3.0, Σ F = 4.0
- CL:
2*4.0/(4.0+3.0)-1
= .143 - Salida:
F .143
- Género + masculinidad / feminidad de cada palabra:
Frankly, I don't give a ^$*.
[M2.4,F1.5,M1.2,F1.0,F1.5]
, Σ M = 3.6, Σ F = 4.0, CL:2*4.0/(4.0+3.6)-1
= .053, Salida:F .053
I'm 50 dollars from my goal!
[F.75,M1.25,M1.2,M2.0,F1.0]
, Σ M = 4.45, Σ F = 1.75, CL:2*4.45/(4.45+1.75)-1
= .435, Salida:M .435
Referencias
fuente
Respuestas:
Python 3 ,
320317307286253189 bytesPruébalo en línea!
Sin golf :
fuente
map(e,s.split())
en lugar de[e(x)for x in s.split()]
return'FM'[h>S],2*max(S,h)/(S+h)-1
finalsum(map(s.count,chars))
, reduciendo su recuento a 253 bytesRubí , 154 + 1 = 155 bytes
Usa la
-n
bandera.Pruébalo en línea!
fuente
Python 3 ,
205 201 197192 bytes-Gracias a @Value Ink por 4 bytes: de
lower()
antemano-Gracias a @Coty Johnathan Saxman por 9 bytes: Condición invertida
.4*(v+c)>v
y-~c
por(c+1)
verificación de consonantes basada en cambio de bits en lugar de literal.Python 3 , 192 bytes
Pruébalo en línea!
fuente
for i in input().lower().split():
para que solo necesite buscar'aeiou'
el recuento de vocales y cortar lalower
llamada en el recuento de consonantes.C (gcc) ,
237229222216 bytesChico, pensé que podría hacer esto en MUCHOS MENOS BYTES ...
Pruébalo en línea!
fuente
Lisp común, 404 bytes
Buen viejo lisp verboso!
Pruébalo en línea!
Versión sin golf:
fuente