Ein Problem auf einer solchen Website ist, dass Sie oft nicht wissen, ob Sie mit einem Mann oder einer Frau sprechen. Sie haben jedoch eine einfache NLP-Technik entwickelt, mit der Sie das Geschlecht des Verfassers eines Textes bestimmen können.
Theorie
Ungefähr 38,1% der im Englischen verwendeten Buchstaben sind Vokale [a, e, i, o, u] (siehe Referenzen unten, y
ist in diesem Fall KEIN Vokal). Daher definieren wir jedes Wort, das mindestens 40% Vokale enthält, als weibliches Wort und jedes Wort, das weniger als 40% Vokale enthält, als männliches Wort .
Über diese Definition hinaus können wir auch die Männlichkeit oder Weiblichkeit eines Wortes finden. Sei C die Anzahl der Konsonanten im Wort und V die Anzahl der Vokale:
- Wenn ein Wort weiblich ist, ist es weiblich
1.5*V/(C+1)
. - Wenn ein Wort männlich ist, ist es Männlichkeit
C/(1.5*V+1)
.
Zum Beispiel ist das Wort catch
männlich. Seine Männlichkeit ist 4/(1.5*1+1) = 1.6
. Das Wort phone
ist weiblich. Seine Weiblichkeit ist 1.5*2/(3+1) = .75
.
Algorithmus
Um das Geschlecht des Verfassers eines Textes herauszufinden, nehmen wir die Summe der Männlichkeit aller männlichen Wörter (Σ M ) und die Summe der Weiblichkeit aller weiblichen Wörter (Σ F ). Wenn Σ M > Σ F ist , haben wir festgestellt, dass der Schreiber ein Mann ist. Ansonsten haben wir festgestellt, dass der Schriftsteller eine Frau ist.
Vertrauensniveau
Schließlich brauchen wir ein Vertrauensniveau. Wenn Sie festgestellt haben, dass der Autor weiblich ist, ist Ihr Selbstvertrauen . Wenn Sie festgestellt haben, dass der Autor männlich ist, ist das Konfidenzniveau .2*ΣF/(ΣF+ΣM)-1
2*ΣM/(ΣF+ΣM)-1
Eingang
Die Eingabe ist ein englischer Text einschließlich Interpunktion. Alle Wörter sind durch Leerzeichen getrennt (Sie müssen sich keine Gedanken über neue Zeilen oder zusätzliche Leerzeichen machen). Einige Wörter enthalten Nicht-Buchstaben-Zeichen, die Sie ignorieren müssen (z. B. "Du bist"). Wenn Sie auf ein Wort stoßen, das keine Buchstaben enthält (wie "5" oder "!!!"), ignorieren Sie es einfach. Jede Eingabe enthält mindestens ein verwendbares Wort.
Ausgabe
Sie müssen ein M oder F ausgeben, je nachdem, welches Geschlecht der Autor Ihrer Meinung nach ist, gefolgt von Ihrem Vertrauensniveau.
Beispiele
There's a snake in my boot.
- Geschlecht + Männlichkeit / Weiblichkeit jedes Wortes:
[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 - Ausgabe:
F .143
- Geschlecht + Männlichkeit / Weiblichkeit jedes Wortes:
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, Ausgabe: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, Ausgabe:M .435
Verweise
quelle
Antworten:
Python 3 ,
320317307286253189 BytesProbieren Sie es online aus!
Ungolfed :
quelle
map(e,s.split())
anstelle von[e(x)for x in s.split()]
return'FM'[h>S],2*max(S,h)/(S+h)-1
am Endesum(map(s.count,chars))
, indem ich Ihre Anzahl auf 253 Bytes gesenkt habeRuby , 154 + 1 = 155 Bytes
Verwendet die
-n
Flagge.Probieren Sie es online aus!
quelle
Python 3 ,
205 201 197192 Bytes- Danke @Wert Tinte für 4 Bytes:
lower()
vorher -Danke @Coty Johnathan Saxman für 9 Bytes: Invertierter Zustand
.4*(v+c)>v
und-~c
für eine auf(c+1)
Bitverschiebungen basierende Konsonantenprüfung anstelle von Literal.Python 3 , 192 Bytes
Probieren Sie es online aus!
quelle
for i in input().lower().split():
so dass Sie nur nach'aeiou'
der Vokalzahl suchen und denlower
Anruf in der Konsonantenzahl abschneiden müssen .C (gcc) ,
237229222216 BytesJunge, ich dachte, ich könnte das in VIELEN WENIGEREN BYTES tun ...
Probieren Sie es online aus!
quelle
Common Lisp, 404 Bytes
Gutes altes wortreiches Lispeln!
Probieren Sie es online aus!
Ungolfed Version:
quelle