Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ho to do lemmatization on German text?

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?

like image 690
PParker Avatar asked Dec 06 '22 09:12

PParker


1 Answers

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']
like image 95
cronoik Avatar answered Apr 28 '23 10:04

cronoik