【问题标题】:Ho to do lemmatization on German text?如何在德语文本中进行词形还原?
【发布时间】:2023-06-30 12:30:01
【问题描述】:

我有一个要应用词形还原的德语文本。如果无法进行词形还原,那么我也可以接受词干提取。

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

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 似乎对单个单词也不起作用。

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

【问题讨论】:

    标签: nlp spacy lemmatization


    【解决方案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 = ' '.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']
    

    【讨论】:

    • 我建议 result = ' '.join([token.lemma_ for token in nlp(mail)])
    【解决方案2】:

    使用HanoverTagger 库,您可以这样做:(请参阅here 了解更多详细信息)

    首先使用!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))
    

    【讨论】:

      最近更新 更多