options(paged.print = FALSE,
pillar.print_max = 15,
pillar.print_min = 10)
count-emojis
textmining
tidymodels
count
germeval
emoji
string
Aufgabe
Zählen sie die Emojis eines Textes.
Untersuchen Sie die Rechenzeit, die die jeweiligen Verfahren benötigen.
Hinweise:
- Orientieren Sie sich im Übrigen an den allgemeinen Hinweisen des Datenwerks.
Lösung
Setup
library(tidyverse)
library(tictoc) # Zeitmessung
Teststring:
<-
test_text tibble(id = 1:4,
text = c("Abbau ist jetzt",
"Hello 😊🌎🚀",
"🔫",
"🔫 🔪"),
valence = c(0, 1, -1, -2))
test_text
# A tibble: 4 × 3
id text valence
<int> <chr> <dbl>
1 1 Abbau ist jetzt 0
2 2 Hello 😊🌎🚀 1
3 3 🔫 -1
4 4 🔫 🔪 -2
Daten importieren:
data(wild_emojis, package = "pradadata")
$value <- 1
wild_emojis$word <- wild_emojis$emoji wild_emojis
Wörter zählen im Test-Datensatz
stringr::str_count
Man kann den Unicode-Code von Emojis ansprechen, praktische Sache:
<- "\\p{So}" emoji_pattern
$text |>
test_textmap_int(str_count, emoji_pattern)
[1] 0 3 1 2
Die Funktion map
ist nicht nötig:
str_count(test_text$text, "\\p{So}")
[1] 0 3 1 2
Als neue Spalte in der Tabelle:
|>
test_text mutate(n_emojis = str_count(text, "\\p{So}"))
# A tibble: 4 × 4
id text valence n_emojis
<int> <chr> <dbl> <int>
1 1 Abbau ist jetzt 0 0
2 2 Hello 😊🌎🚀 1 3
3 3 🔫 -1 1
4 4 🔫 🔪 -2 2
Germeval-Datensatz
data(germeval_train, package = "pradadata")
stringr::str_count
tic()
<- germeval_train$text |>
method1 map_int(str_count, emoji_pattern)
toc()
0.451 sec elapsed
|> str() method1
int [1:5009] 0 0 1 0 0 0 0 0 0 1 ...
print(method1, max = 20)
[1] 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 4 0 0
[ reached getOption("max.print") -- omitted 4989 entries ]
Die Funktion map
ist nicht nötig:
tic()
<-
method3 str_count(germeval_train$text, emoji_pattern)
toc()
0.009 sec elapsed
|> head() method3
[1] 0 0 1 0 0 0
Dann geht es auch viel schneller.
Als neue Spalte in der Tabelle:
tic()
<-
method4 |>
germeval_train mutate(n_words = str_count(text, emoji_pattern))
toc()
0.009 sec elapsed
str(method4)
'data.frame': 5009 obs. of 5 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ text : chr "@corinnamilborn Liebe Corinna, wir würden dich gerne als Moderatorin für uns gewinnen! Wärst du begeisterbar?" "@Martin28a Sie haben ja auch Recht. Unser Tweet war etwas missverständlich. Dass das BVerfG Sachleistungen nich"| __truncated__ "@ahrens_theo fröhlicher gruß aus der schönsten stadt der welt theo ⚓️" "@dushanwegner Amis hätten alles und jeden gewählt...nur Hillary wollten sie nicht und eine Fortsetzung von Obam"| __truncated__ ...
$ c1 : chr "OTHER" "OTHER" "OTHER" "OTHER" ...
$ c2 : chr "OTHER" "OTHER" "OTHER" "OTHER" ...
$ n_words: int 0 0 1 0 0 0 0 0 0 1 ...
- attr(*, ".internal.selfref")=<externalptr>
|> head() method4
id
1 1
2 2
3 3
4 4
5 5
6 6
text
1 @corinnamilborn Liebe Corinna, wir würden dich gerne als Moderatorin für uns gewinnen! Wärst du begeisterbar?
2 @Martin28a Sie haben ja auch Recht. Unser Tweet war etwas missverständlich. Dass das BVerfG Sachleistungen nicht ausschließt, kritisieren wir.
3 @ahrens_theo fröhlicher gruß aus der schönsten stadt der welt theo ⚓️
4 @dushanwegner Amis hätten alles und jeden gewählt...nur Hillary wollten sie nicht und eine Fortsetzung von Obama-Politik erst recht nicht..!
5 @spdde kein verläßlicher Verhandlungspartner. Nachkarteln nach den Sondierzngsgesprächen - schickt diese Stümper #SPD in die Versenkung.
6 @Dirki_M Ja, aber wo widersprechen die Zahlen denn denen, die im von uns verlinkten Artikel stehen? In unserem Tweet geht es rein um subs. Geschützte. 2017 ist der gesamte Familiennachzug im Vergleich zu 2016 - die Zahlen, die Hr. Brandner bemüht - übrigens leicht rückläufig gewesen.
c1 c2 n_words
1 OTHER OTHER 0
2 OTHER OTHER 0
3 OTHER OTHER 1
4 OTHER OTHER 0
5 OFFENSE INSULT 0
6 OTHER OTHER 0
Categories:
- textmining
- tidymodels
- count
- germeval
- emojis
- string