如何在德语文本上进行词形还原?

6
我有一段德文文本,想要对其应用词形还原。如果无法进行词形还原,则我也可以接受词干提取。 数据:这是我的德文文本:
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=['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']

我尝试使用 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]

我看到了以下问题:
  1. 我的数据是以句子为结构而不是单词

  2. 在我的情况下,即使针对单个单词,spacy的词形还原似乎也无法正常工作。

请问您能告诉我如何解决这些问题吗?
2个回答

13

只需将其包装成循环并获取每个标记的词形变化:

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)

输出:

['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']

1
我建议使用以下代码:result = ' '.join([token.lemma_ for token in nlp(mail)]) - simsi

6

使用HanoverTagger库,您可以按照以下方式执行:(更多详情请参见此处

首先使用!pip install HanTa安装HanTa,然后:

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接