如何对德语文本进行 POS 标记?

How can I POS tag German texts?

我一直在做一些自然语言处理的工作。

对于英文词性标注,比较简单,因为我只需要使用内置的nltk函数。我想以类似的方式处理德语文本。

由于 nltk 没有针对德语的内置函数,我尝试使用 Stanford POSTagger:

from nltk.tag.stanford import StanfordPOSTagger
import os
import nltk
java_path = "C:/Program Files/Java/jdk1.8.0_71/bin/java.exe"
os.environ['JAVAHOME'] = java_path
sentence = "Man könnte Klöckner vorhalten, sich an ihre eigenen Appelle nicht zu halten. Doch niemand in der Union wagte das. Nicht einmal die von ihr attackierten Briefschreiber. Klöckner genießt im Moment Narrenfreiheit."
tokens = nltk.word_tokenize(sentence, 'german')
german_postagger1 = StanfordPOSTagger(r'E:/python/nlptest/models/german-hgc.tagger', r'E:/python/nlptest/stanford-postagger.jar')
gp1 = german_postagger1.tag(tokens)

处理完差不多要7秒,实在受不了

我也尝试了模块 Pattern,但它不支持 Python 3,我使用的是 Python 3.4.

有没有更快的 POS 标记德语句子的方法?

TreeTagger is a fast easy-to-install well-documented decison-tree based tagger with support for many languages (and yeah, it's built by a German) and a python wrapper.

免责声明:无耻外挂

尝试安装完整的 nltk_cli (https://github.com/alvations/nltk_cli) 并使用此命令:

alvas@ubi:~/git/nltk_cli$ echo "Man könnte Klöckner vorhalten, sich an ihre eigenen Appelle nicht zu halten. Doch niemand in der Union wagte das. Nicht einmal die von ihr attackierten Briefschreiber. Klöckner genießt im Moment Narrenfreiheit." > test.in

alvas@ubi:~/git/nltk_cli$ python3 stanford.py --tool=postagger \
> --jar=$HOME/stanford-postagger/stanford-postagger.jar \
> --model=$HOME/stanford-postagger/models/german-fast.tagger \
> --input=test.in

[输出]:

Man#PIS könnte#VMFIN Klöckner#NE vorhalten,#VVFIN sich#PRF an#APPR ihre#PPOSAT eigenen#ADJA Appelle#NN nicht#PTKNEG zu#APPR halten.#ADJA Doch#KON niemand#PIS in#APPR der#ART Union#NN wagte#VVFIN das.#ADV Nicht#PTKNEG einmal#ADV die#ART von#APPR ihr#PPOSAT attackierten#ADJA Briefschreiber.#NN Klöckner#NE genießt#VVFIN im#APPRART Moment#NN Narrenfreiheit.#NE

基于快速规则的词性标注和词法标注器 RDRPOSTagger 支持 13 种语言的预训练模型,包括德语(词样标注和词法标注)。它在 Python(以及 Java)中实现。

例如,Python 实现的英文标记速度,使用 Core2Duo 2.4GHz 计算机计算的单线程实现的标记速度为 8K words/second。您可以使用更强大的计算机实现更快的标记速度。