rtext-miningcapitalizationlemmatizationtolower

lemmatization of german words (Capital letters and lower case letters)


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!


Solution

  • 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"