Ho to do lemmatization on German text?
Asked Answered
P

2

7

I have a German text that I want to apply lemmatization to. If lemmatization is not possible, then I can live with stemming too.

Data: This is my German text:

mails=['Hallo. Ich spielte am frühen Morgen und ging dann zu einem Freund. Auf Wiedersehen', 'Guten Tag Ich mochte Bälle und will etwas kaufen. Tschüss']

Goal: After applying lemmatization it should look similar to this:

mails_lemma=['Hallo. Ich spielen am früh Morgen und gehen dann zu einer Freund. Auf Wiedersehen', 'Guten Tag Ich mögen Ball und wollen etwas kaufen Tschüss']

I tried using spacy

conda install -c conda-forge spacy

python -m spacy download de_core_news_md

import spacy
from spacy.lemmatizer import Lemmatizer
lemmatizer = Lemmatizer()
[lemmatizer.lookup(word) for word in mails]

I see following problems.

  1. My data is structured in sentences and not single words

  2. In my case spacy lemmatization doesn't seem to work even for single words.

Can you please tell me how this works?

Pedant answered 9/9, 2019 at 15:43 Comment(0)
T
15

Just wrap it into a loop and get the lemma of each token:

import spacy
nlp = spacy.load('de_core_news_md')

mails=['Hallo. Ich spielte am frühen Morgen und ging dann zu einem Freund. Auf Wiedersehen', 'Guten Tag Ich mochte Bälle und will etwas kaufen. Tschüss']

mails_lemma = []

for mail in mails:
     doc = nlp(mail)
     result = ' '.join([x.lemma_ for x in doc]) 
     mails_lemma.append(result)

Output:

['hallo . ich spielen am früh Morgen und gehen dann zu einer Freund . Auf Wiedersehen ',
 'Guten tagen ich mögen Ball und wollen etwas kaufen . Tschüss']
Throve answered 9/9, 2019 at 20:40 Comment(1)
I would suggest result = ' '.join([token.lemma_ for token in nlp(mail)])Counterpoise
B
6

Using HanoverTagger library, you can do it this way: (see here for more detail)

first install HanTa using !pip install HanTa, and then

from HanTa import HanoverTagger as ht

tagger = ht.HanoverTagger('morphmodel_ger.pgz')

mails=['Hallo. Ich spielte am frühen Morgen und ging dann zu einem Freund. Auf Wiedersehen',
       'Guten Tag Ich mochte Bälle und will etwas kaufen. Tschüss']

mails_lemma = []
for mail in mails:
    lemma = [lemma for (word,lemma,pos) in tagger.tag_sent(mail.split())]
    mails_lemma.append(' '.join(lemma))
Bottleneck answered 14/12, 2020 at 10:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.