2009-10-28 4 views
22

J'utilise NLTK pour extraire les noms d'un texte-chaîne commençant par la commande suivante:marquage POS en allemand

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

Il fonctionne très bien en anglais. Y at-il un moyen facile de le faire fonctionner pour l'allemand aussi bien?

(je n'ai aucune expérience avec la programmation en langage naturel, mais je réussi à utiliser la bibliothèque NLTK python qui est grand à ce jour.)

+1

Un avantage que vous pourriez exploiter est que tous les noms sont activés en allemand. –

+2

Balise 'german' enlevée dans le cadre du [** 2012 nettoyage **] (http://meta.stackexchange.com/questions/128315/the-great-stack-overflow-tag-question-cleanup-of-2012). –

Répondre

20

logiciel de langage naturel fait sa magie en tirant parti de corpus et les statistiques qu'ils fournissent. Vous aurez besoin de parler à nltk d'un corpus allemand pour l'aider à symboliser correctement l'allemand. Je crois que le corpus EUROPARL pourrait vous aider à démarrer.

Voir nltk.corpus.europarl.german - c'est ce que vous cherchez.

En outre, pensez à baliser cette question avec "nlp".

+2

+1 pour m'avoir battu dessus ;-), merci aussi de m'avoir suggéré de marquer la question elle-même. – mjv

+1

Thx. J'ai obtenu le fichier allemand du corpus EUROPAL avec votre aide et un autre indice utile. http://code.google.com/p/nltk/issues/detail? id = 415 Activé pour l'apprentissage du jeton. Johannes –

+3

Avec le module 'europarl_raw', vous pouvez seulement former un tokenizer mais pas un tagger POS car le corpus n'est pas étiqueté POS. –

4

L'étiquetage de partie de la parole (POS) est très spécifique à un langage [naturel] particulier. NLTK inclut de nombreux tagueurs différents, qui utilisent des techniques distinctes pour déduire l'étiquette d'un jeton donné dans un jeton donné. La plupart (mais pas tous) de ces tagueurs utilisent un modèle statistique comme l'outil principal ou unique pour «faire l'affaire». De tels étiqueteurs ont besoin de "données d'apprentissage" pour construire cette représentation statistique du langage, et les données d'apprentissage viennent sous la forme de corpus. La «distribution» NTLK elle-même comprend beaucoup de ces corpus, ainsi qu'un ensemble de «lecteurs de corpus» qui fournissent une API pour lire différents types de corpus. Je ne connais pas l'état des choses à NTLK, et si cela inclut un corpus allemand. Vous pouvez cependant trouver gratuitement des corpus gratuits que vous devrez ensuite convertir dans un format qui satisfait le lecteur de corpus NTLK approprié, et vous pourrez ensuite l'utiliser pour former un tagger POS pour la langue allemande.

Vous pouvez même créer votre propre corpus, mais c'est un sacré boulot; Si vous travaillez dans une université, vous devez trouver des moyens de corrompre et contraindre les étudiants à le faire pour vous ;-)

2

J'ai écrit un blog sur la façon de convertir le corpus annoté allemand TIGER pour l'utiliser. avec le NLTK. Have a look at it here.

+5

Le post de blog référencé n'est plus disponible. – Tim

+0

Lien vers l'article de blog a été mis à jour! – b3000

11

Le Pattern library inclut une fonction pour analyser des phrases allemandes et le résultat inclut les balises de partie de discours. Ce qui suit est copiée à partir de leur documentation:

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') 

Si vous préférez la balise SSSS défini, vous pouvez régler le paramètre optionnel tagset="STTS".

4

Vous pouvez éventuellement utiliser le tagueur POS de Stanford. Voici une recette que j'ai écrite. Il y a des recettes de python pour la PNL allemand que j'ai compilé et vous pouvez y accéder sur http://htmlpreview.github.io/?https://github.com/alvations/DLTK/blob/master/docs/index.html

#-*- coding: utf8 -*- 

import os, glob, codecs 

def installStanfordTag(): 
    if not os.path.exists('stanford-postagger-full-2013-06-20'): 
     os.system('wget http://nlp.stanford.edu/software/stanford-postagger-full-2013-06-20.zip') 
     os.system('unzip stanford-postagger-full-2013-06-20.zip') 
    return 

def tag(infile): 
    cmd = "./stanford-postagger.sh "+models[m]+" "+infile 
    tagout = os.popen(cmd).readlines() 
    return [i.strip() for i in tagout] 

def taglinebyline(sents): 
    tagged = [] 
    for ss in sents: 
     os.popen("echo '''"+ss+"''' > stanfordtemp.txt") 
     tagged.append(tag('stanfordtemp.txt')[0]) 
    return tagged 

installStanfordTag() 
stagdir = './stanford-postagger-full-2013-06-20/' 
models = {'fast':'models/german-fast.tagger', 
      'dewac':'models/german-dewac.tagger', 
      'hgc':'models/german-hgc.tagger'} 
os.chdir(stagdir) 
print os.getcwd() 


m = 'fast' # It's best to use the fast german tagger if your data is small. 

sentences = ['Ich bin schwanger .','Ich bin wieder schwanger .','Ich verstehe nur Bahnhof .'] 

tagged_sents = taglinebyline(sentences) # Call the stanford tagger 

for sent in tagged_sents: 
    print sent 
+0

Le lien est 404 – b3000

+1

Désolé, ce lien est mis à jour http://goo.gl/wdnz1W – alvas