Preliminaries —-

Daten —–

Ich hatte zuerst versucht Keyness auf meinen vollen Datensatz (ski1) anzuwenden, die Resultate waren aber nicht interessant weil:

\(\bullet\) starke Präsenz an Eigennnamen
\(\bullet\) ungenaue Zuordnung der Artikel nach Geschlecht
\(\bullet\) enrome Menge an Daten

Aus diesem Grund habe ich mich entschieden den dd_kwic Datensatz (i.e. 30 Wörter, welche die Namen der SkimeisterInnen umzingeln) zu gebrauchen aus dem ich schon die (mit POS erkannten) Eigennamen entfernt habe.

dd_kwic_keyness <- read.csv("Inputs/kwic_filtered.csv")
dd_kwic_keyness <- as.data.frame(dd_kwic_keyness)
dd_kwic_keyness <- dplyr::select(dd_kwic_keyness, c("docname", "text", "keyword", "sex"))

Preprocesing —–

#corpus
corpus_kwic_keyness <- corpus(dd_kwic_keyness) 

#tokens
tokens_kwic_keyness <- tokens(corpus_kwic_keyness,
                            remove_punct = T,
                            remove_numbers = T,
                            remove_symbols = T)

#additionnal stopwords
stopwords <- readRDS("Inputs/stopwords.rds")
tokens_kwic_keyness <- tokens_remove(tokens_kwic_keyness, stopwords)

#stemming von besonders interessanten wörtern wos nicht funktioniert hat
tokens_kwic_keyness <- tokens_wordstem(tokens_kwic_keyness, language = "de") #solala

tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("favoritin", "favoritinnen"), replacement = c("favorit", "favorit"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("athletin", "athletinnen"), replacement = c("athlet", "athlet"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("konkurrentin", "konkurrentinnen"), replacement = c("konkurrent", "konkurrent"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("topfavoritin", "topfavoritinnen", "top-favoritin", "top-favoritinnen", "top-favorit"), replacement = c("topfavorit", "topfavorit", "topfavorit", "topfavorit", "topfavorit"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("spitzenfahrerin", "spitzenfahrerinnen"), replacement = c("spitzenfahr", "spitzenfahr"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("aussenseiterin", "aussenseiterinnen"), replacement = c("aussenseit", "aussenseit"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("nachwuchsfahrerin", "nachwuchsfahrerinnen"), replacement = c("nachwuchsfahr", "nachwuchsfahr"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("teamleaderin", "teamleaderinnen"), replacement = c("teamlead", "teamlead")) #stamm achntung
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("sportlerin", "sportlerinnen"), replacement = c("sportler", "sportler")) #stamm achtung
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("leaderin", "leaderinnen", "leader"), replacement = c("leader", "leader", "leader")) #stamm achtung
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("dominatorin", "dominatorinnen"), replacement = c("dominator", "dominator"))
tokens_kwic_keyness<- tokens_replace(tokens_kwic_keyness, pattern = c("hoffnungstragerin", "hoffnungstragerinnen"), replacement = c("hoffnungstrager", "hoffnungstrager")) #stamm achtung

#dfm
dfm_kwic_keyness <- dfm(tokens_kwic_keyness)
#dfm_kwic_keyness_bis <- dfm_remove(tokens_kwic_keyness_bis, german_stopwords)

Keyness —–

Skifahrer —–

#keyness
kwic_keyness_results_m <- dfm_group(dfm_kwic_keyness, sex) %>% textstat_keyness("Mann")
kwic_keyness_results_m

#plot
textplot_keyness(kwic_keyness_results_m, n = 20, show_reference = FALSE, color = "darkgreen")

Skifahrerinnen —–

kwic_keyness_results_f <- dfm_group(dfm_kwic_keyness, sex) %>% textstat_keyness("Frau")
kwic_keyness_results_f

textplot_keyness(kwic_keyness_results_f, n = 20, show_reference = FALSE, color = "darkgreen")

An sich sind die Resultate nicht direkt gebrauchbar weil es beim Stemming viele Probleme gab dennoch kommen gewisse Beschreibungen zum Vorschein, welche man weiter nachgehen könnte:

\(\bullet\) favorit
\(\bullet\) topfavorit
\(\bullet\) athlet
\(\bullet\) konkurrent
\(\bullet\) spitzenfahr
\(\bullet\) spezialist
\(\bullet\) legendar
\(\bullet\) held
\(\bullet\) grandios
\(\bullet\) dominator
\(\bullet\) aussenseiter
\(\bullet\) sieger
\(\bullet\) titelverteidiger
\(\bullet\) leader
\(\bullet\) allrounder
\(\bullet\) hoffnungstrager
\(\bullet\) aufsteiger
\(\bullet\) nachfolger
\(\bullet\) uberflieger

Supervised Model: Feature-Scores —–

Daten —–

Auch hier verwende ich die Resultate fom KWIC und dem Preprocessing mit Entfernung der Eigennamen anhand POS-tags.

dd_kwic_fssm <- read.csv("Inputs/kwic_filtered.csv")
dd_kwic_fssm <- as.data.frame(dd_kwic_fssm)
dd_kwic_fssm <- dplyr::select(dd_kwic_fssm, c("docname", "text", "keyword", "sex"))

Preprocessing —–

#corpus
corpus_kwic_fssm <- corpus(dd_kwic_fssm) 

#tokens
tokens_kwic_fssm <- tokens(corpus_kwic_fssm,
                            remove_punct = T,
                            remove_numbers = T,
                            remove_symbols = T)

#additionnal stopwords
stopwords <- readRDS("Inputs/stopwords.rds")
tokens_kwic_fssm <- tokens_remove(tokens_kwic_fssm, stopwords)

#stemming
tokens_kwic_fssm <- tokens_wordstem(tokens_kwic_fssm, language = "de")

#dfm 
dfm_kwic_fssm <- dfm(tokens_kwic_fssm)

Feature Scores (supervised model)

set.seed(1111)

docvars(dfm_kwic_fssm)

train_dfm <- dfm_kwic_fssm |> dfm_trim(100)
nrow(train_dfm)
length(train_dfm)

model_nb <- textmodel_nb(train_dfm, docvars(train_dfm,"sex"))

coefs_nb <- coef(model_nb) |> 
  as.data.frame()

coefs_nb |> 
arrange(-Frau) |> 
head(10)

coefs_nb_plot <- coefs_nb |> 
  arrange(Frau) |> 
  rownames_to_column("feature") |> 
  head(50)

coefs_nb_plot |> 
  ggplot(aes(x=Frau,y=factor(feature,levels=feature)))+
  geom_point(colour = "darkgreen", size = 2) +
  geom_segment(aes(x=0, xend=Frau, y=feature, yend=feature))+
labs(x = "Vorhersagekraft für Geschlecht = Mann",
     y = "Feature") +
theme_bw()+
theme(legend.position="none",text=element_text(size=15))

coefs_nb_plot <- coefs_nb |> 
  arrange(Mann) |> 
  rownames_to_column("feature") |> 
  head(50)

coefs_nb_plot |> 
  ggplot(aes(x=Mann,y=factor(feature,levels=feature)))+
  geom_point(colour = "darkgreen", size = 2) +
  geom_segment(aes(x=0, xend=Mann, y=feature, yend=feature))+
labs(x = "Vorhersagekraft für Geschlecht = Frau",
     y = "Feature") +
theme_bw()+
theme(legend.position="none",text=element_text(size=15))