何对德语文本进行词形化?

时间:2019-09-09 15:43:53

标签: nlp spacy lemmatization

我有一个德语文本,我想对它进行限制词法处理。如果无法进行词法限制,那么我也可以忍受词根提取。

数据:这是我的德语文本:

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下载de_core_news_md

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

我看到以下问题。

  1. 我的数据是用句子而不是单个单词构成的

  2. 就我而言,即使对于单个单词,spacy lemmatization似乎也不起作用。

您能告诉我这是如何工作的吗?

2 个答案:

答案 0 :(得分:1)

只需将其包装成一个循环并获取每个令牌的引理:

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 = ''
     for token in doc:
        result += token.lemma_
        result += ' ' 
     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 :(得分:1)

使用HanoverTagger库,您可以这样操作:(有关更多详细信息,请参见here

首先使用HanTa安装!pip install 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))