Question

J'utilise NLTK pour extraire les noms d'une chaîne de texte commençant par la commande suivante:

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

Cela fonctionne très bien en anglais. Existe-t-il un moyen simple de le faire fonctionner également en allemand?

(Je n'ai aucune expérience de la programmation en langage naturel, mais j'ai réussi à utiliser la bibliothèque python nltk, ce qui est génial jusqu'à présent.)

Était-ce utile?

La solution

Les logiciels en langage naturel font leur magie en exploitant les corpus et les statistiques qu’ils fournissent. Vous aurez besoin de parler à nltk de certains corpus allemands pour l'aider à tokeniser correctement l'allemand. Je pense que le corpus EUROPARL pourrait vous aider à démarrer.

Voir nltk.corpus.europarl_raw et cette réponse pour un exemple de configuration.

Envisagez également de marquer cette question avec "nlp".

Autres conseils

La bibliothèque de modèles comprend une fonction permettant d'analyser les phrases allemandes et Le résultat inclut les balises de partie de parole. Ce qui suit est copié 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 le jeu de balises SSTS, vous pouvez définir le paramètre facultatif tagset = "STTS" .

Le marquage de partie de discours (POS) est très spécifique à un langage [naturel] particulier. NLTK inclut de nombreux marqueurs 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 étiqueteurs utilisent un modèle statistique comme outil principal ou unique pour "faire le tour". Ces marqueurs nécessitent des "données de formation". Cette représentation statistique de la langue est construite sur la base des corpus.

La "distribution" de NTLK elle-même inclut 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 de choses dans NTLK proprement dit, et si cela inclut un corpus allemand. Vous pouvez toutefois localiser gratuitement certains corpus gratuits que vous devrez ensuite convertir en un format conforme au lecteur de corpus NTLK approprié. Vous pourrez ensuite l'utiliser pour former un étiqueteur POS pour la langue allemande.

Vous pouvez même créer votre propre corpus, mais c’est un sacré travail. si vous travaillez dans une université, vous devez trouver le moyen de corrompre ou de contraindre les étudiants à le faire pour vous ;-)

Vous pouvez éventuellement utiliser l’étiqueteur Stanford POS. Ci-dessous une recette que j'ai écrite. J'ai compilé des recettes de PNL allemand pour Python et vous pouvez y accéder via 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

J'ai écrit un article sur la conversion du corpus TIGER annoté en allemand afin de l'utiliser avec le NLTK. Jetez un coup d'oeil ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top