德语中的词性标注

28 投票
6 回答
23029 浏览
提问于 2025-04-15 15:28

我正在使用NLTK这个工具,从一段文本中提取名词,开始时用的命令是:

tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string)))

在英语中效果很好。 有没有简单的方法可以让它也适用于德语呢?

(我对自然语言处理没有经验,但我成功地使用了Python的nltk库,到目前为止感觉非常不错。)

6 个回答

4

词性标注(POS tagging)是针对特定语言的一个技术。NLTK这个工具包里有很多不同的标注器,它们用不同的方法来判断一个词的词性。大多数(但不是全部)标注器主要依靠某种统计模型来完成这个任务。这些标注器需要一些“训练数据”,也就是用来建立语言统计模型的数据,这些数据通常是以语料库的形式存在。

NLTK的“发行版”里包含了很多这样的语料库,还有一些“语料库读取器”,可以用来读取不同类型的语料库。我不太清楚NLTK的具体情况,是否包含德语的语料库。不过,你可以找到一些免费的语料库,然后需要把它们转换成适合NLTK读取器的格式,这样就可以用来训练一个德语的词性标注器。

你甚至可以自己创建一个语料库,但这可真是个费劲的活;如果你在大学工作,可能得想办法让学生帮你做这件事,或者用其他方式让他们参与进来 ;-)

19

这个模式库里有一个功能,可以解析德语句子,并且结果会显示每个词的词性标签。下面的内容是从他们的文档中复制过来的:

from pattern.de import parse, split
s = parse('Die Katze liegt auf der Matte.')
s = split(s)
print s.sentences[0]

>>>   Sentence('Die/DT/B-NP/O Katze/NN/I-NP/O liegt/VB/B-VP/O'
     'auf/IN/B-PP/B-PNP der/DT/B-NP/I-PNP Matte/NN/I-NP/I-PNP ././O/O')

更新:还有一个选择是spacy,在这篇博客文章中有一个快速示例:

import spacy

nlp = spacy.load('de')
doc = nlp(u'Ich bin ein Berliner.')

# show universal pos tags
print(' '.join('{word}/{tag}'.format(word=t.orth_, tag=t.pos_) for t in doc))
# output: Ich/PRON bin/AUX ein/DET Berliner/NOUN ./PUNCT
23

自然语言软件的魔力在于它利用了大量的文本数据和这些数据所提供的统计信息。你需要告诉nltk一些德语的文本数据,这样它才能正确地处理德语的分词。我觉得EUROPARL这个文本库可能会对你有帮助。

你可以查看nltk.corpus.europarl_raw这个回答,里面有一些示例配置。

另外,考虑把这个问题标记为“nlp”。

撰写回答