I would like to lemmatize a list of German words, including nouns and verbs. The struggle here is that this implies words beginning with capital letters and others with lower case letters. Until now I worked with a lookup list. Here, the sample
lookup_list <-
data.frame(
cbind(
c("mache","tust","Tuns","Reisen","genaue","genauer","pflanze","Pflanzen","reise"),
c("machen","tuen","Tun","Reise","genau","genau","pflanzen","Pflanze","reisen")
)
)
names(lookup_list) <- c("word","lemma")
Text2Lemmatize <- "mache tust Tuns Reisen genaue genauer pflanze Pflanzen reise"
The problem is that '''lemmatize()''' ignores the word in the list that begin with capital letters.
lemmatize_strings(Text2Lemmatize, lookup_list)
> lemmatize_strings(Text2Lemmatize, lookup_list)
[1] "machen tuen Tuns Reisen genau genau pflanzen Pflanzen reisen"
Can anybody help me out with this little problem?
Thanks in advance!
If you want lemmatization of German words or text I advice using udpipe.
library(udpipe)
# download german ud model
ud_model <- udpipe_download_model("german")
ud_model <- udpipe_load_model(ud_model)
Text2Lemmatize <- "mache tust Tuns Reisen genaue genauer pflanze Pflanzen reise"
x <- udpipe_annotate(ud_model, Text2Lemmatize)
x <- as.data.frame(x)
x[, c("token", "lemma", "upos")]
token lemma upos
1 mache mach PRON
2 tust tusen VERB
3 Tuns Twir PRON
4 Reisen Reise|Reisen NOUN
5 genaue genau VERB
6 genauer genau ADJ
7 pflanze pflanz ADJ
8 Pflanzen Pflanze|Pflanzen NOUN
9 reise reisen VERB
Works better when it is actual text, taken from wikipedia:
"Das Matterhorn ist einer der höchsten Berge der Alpen. Wegen seiner markanten Gestalt und seiner Besteigungsgeschichte ist das Matterhorn einer der bekanntesten Berge der Welt. Für die Schweiz ist es ein Wahrzeichen und eine der meistfotografierten Touristenattraktionen."
german_text
x <- udpipe_annotate(ud_model, german_text)
x <- as.data.frame(x)
# show first 10 results
head(x[, c("token", "lemma", "upos")], 10)
token lemma upos
1 Das der DET
2 Matterhorn Matterhorn PROPN
3 ist sein AUX
4 einer ein PRON
5 der der DET
6 höchsten hoch ADJ
7 Berge Berg NOUN
8 der der DET
9 Alpen Alp NOUN
10 . . PUNCT
If it is wordstemming you need, then use quanteda. It works a lot better with non-English languages.
library(quanteda)
my_toks <- tokens(Text2Lemmatize)
my_toks_stemmed <- tokens_wordstem(my_toks, language = "de")
my_toks_stemmed
Tokens consisting of 1 document.
text1 :
[1] "mach" "tust" "Tun" "Reis" "genau" "genau" "pflanz" "Pflanz" "reis"