我有一个德语文本,我想对它进行限制词法处理。如果无法进行词法限制,那么我也可以忍受词根提取。
数据:这是我的德语文本:
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]
我看到以下问题。
我的数据是用句子而不是单个单词构成的
就我而言,即使对于单个单词,spacy lemmatization似乎也不起作用。
您能告诉我这是如何工作的吗?
答案 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))