Um problema em um site como esse é que muitas vezes você não sabe se está falando com um homem ou uma mulher. No entanto, você criou uma técnica simples de PNL que pode ser usada para determinar o sexo do escritor de um pedaço de texto.
Teoria
Aproximadamente 38,1% das letras usadas em inglês são vogais [a, e, i, o, u] (consulte as referências abaixo, y
NÃO é uma vogal neste caso). Portanto, definiremos qualquer palavra que tenha pelo menos 40% de vogais como uma palavra feminina e qualquer palavra que tenha menos de 40% de vogais como uma palavra masculina .
Além dessa definição, também podemos encontrar a masculinidade ou feminilidade de uma palavra. Seja C o número de consoantes na palavra e V o número de vogais:
- Se uma palavra é feminina, é feminilidade
1.5*V/(C+1)
. - Se uma palavra é masculina, é masculinidade
C/(1.5*V+1)
.
Por exemplo, a palavra catch
é masculina. Sua masculinidade é 4/(1.5*1+1) = 1.6
. A palavra phone
é feminina. Sua feminilidade é 1.5*2/(3+1) = .75
.
Algoritmo
Para descobrir o gênero do escritor de um pedaço de texto, tomamos a soma da masculinidade de todas as palavras masculinas (Σ M ) e a soma da feminilidade de todas as palavras femininas (Σ F ). Se Σ M > Σ F , determinamos que o escritor é um homem. Caso contrário, determinamos que o escritor é uma mulher.
Nível de confiança
Finalmente, precisamos de um nível de confiança. Se você determinou que o escritor é do sexo feminino, seu nível de confiança é . Se você determinou que o escritor é homem, o nível de confiança é .2*ΣF/(ΣF+ΣM)-1
2*ΣM/(ΣF+ΣM)-1
Entrada
Entrada é um pedaço de texto em inglês, incluindo pontuação. As palavras são todas separadas por espaços (você não precisa se preocupar com novas linhas ou espaços extras). Algumas palavras têm caracteres que não são da letra, que você precisa ignorar (como "Você é"). Se você encontrar uma palavra que não seja letras (como "5" ou "!!!"), ignore-a. Cada entrada conterá pelo menos uma palavra utilizável.
Resultado
Você precisa gerar um M ou F, dependendo do sexo que você acha que o escritor é, seguido pelo seu nível de confiança.
Exemplos
There's a snake in my boot.
- Gênero + masculinidade / feminilidade de cada palavra:
[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
= 0,143 - Resultado:
F .143
- Gênero + masculinidade / feminilidade de cada palavra:
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
= 0,053, Saída: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
= 0,435, Saída:M .435
Referências
fonte
Respostas:
Python 3 ,
320317307286253189 bytesExperimente online!
Ungolfed :
fonte
map(e,s.split())
em vez de[e(x)for x in s.split()]
return'FM'[h>S],2*max(S,h)/(S+h)-1
no finalsum(map(s.count,chars))
, deixando cair sua contagem para 253 bytesRuby , 154 + 1 = 155 bytes
Usa a
-n
bandeira.Experimente online!
fonte
Python 3 ,
205 201 197192 bytes-Obrigado, @Value Ink por 4 bytes:
lower()
antes-Obrigado @Coty Johnathan Saxman por 9 bytes: condição invertida
.4*(v+c)>v
e verificação de consoante baseada-~c
em(c+1)
shift de bits em vez de literal.Python 3 , 192 bytes
Experimente online!
fonte
for i in input().lower().split():
para que você só precise procurar'aeiou'
a contagem de vogais e cortar alower
chamada na contagem de consoantes.C (GCC) ,
237229222216 bytesGaroto, embora eu pudesse fazer isso em MUITOS MENOS BYTES ...
Experimente online!
fonte
Lisp comum, 404 bytes
Bom e velho verboso verboso!
Experimente online!
Versão não destruída:
fonte