2016-03-16 19 views
2

我一直在做一些自然語言處理工作。我怎樣才能標記德語文本?

對於英文POS標記,它很簡單,因爲我只需要使用內置的nltk函數。我想同樣處理德語文本。

由於NLTK沒有德國內置的功能,我使用斯坦福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標籤德語句子?

回答

1

免責聲明:無恥插頭

嘗試安裝完整nltk_clihttps://github.com/alvations/nltk_cli),並使用此命令:

[email protected]:~/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 

[email protected]:~/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 
+0

無恥的插頭? :)酷工具。 – erip

+0

@erip哎呦忘了補充一點。已更新回答=) – alvas

0

快速基於規則的POS和形態標記器RDRPOSTagger支持包括德語在內的13種語言的預訓練模型(在POS和形態標記中)。它是用Python(和Java)實現的。

對於Python實現的英語標記速度示例,標記速度爲8K字/秒,計算單個線程實現,使用Core2Duo 2.4GHz計算機。使用功能更強大的電腦,您可以實現更快的標籤速度。