Pregunta

Estoy usando NLTK para extraer sustantivos de una cadena de texto que comienza con el siguiente comando:

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

Funciona bien en inglés. ¿Hay alguna manera fácil de hacer que funcione también para el alemán?

(No tengo experiencia con la programación en lenguaje natural, pero logré usar la biblioteca python nltk, que es genial hasta ahora).

¿Fue útil?

Solución

El software de lenguaje natural hace su magia al aprovechar los cuerpos y las estadísticas que proporcionan. Tendrá que contarle a nltk sobre algunos corpus alemanes para ayudarlo a tokenizar el alemán correctamente. Creo que el EUROPARL corpus podría ayudarlo a ponerse en marcha.

Ver nltk.corpus.europarl_raw y esta respuesta por ejemplo, configuración.

Además, considere etiquetar esta pregunta con " nlp " ;.

Otros consejos

La Biblioteca de patrones incluye una función para analizar oraciones en alemán y El resultado incluye las etiquetas de parte del discurso. Lo siguiente se copia de su documentación:

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 prefiere el conjunto de etiquetas SSTS, puede establecer el parámetro opcional tagset = " STTS " .

El etiquetado de parte de voz (POS) es muy específico para un lenguaje [natural] particular. NLTK incluye muchos etiquetadores diferentes, que utilizan técnicas distintas para inferir la etiqueta de un token dado en un token dado. La mayoría (pero no todos) de estos etiquetadores utilizan una especie de modelo estadístico como el dispositivo principal o único para hacer el truco. Dichos etiquetadores requieren algunos "datos de entrenamiento". sobre el cual construir esta representación estadística del lenguaje, y los datos de entrenamiento vienen en forma de corpus.

La NTLK " distribución " incluye muchos de estos corpus, así como un conjunto de lectores de corpus que proporcionan una API para leer diferentes tipos de corpus. No sé el estado de las cosas en NTLK propiamente dicho, y si esto incluye algún corpus alemán. Sin embargo, puede localizar gratis algunos corpus gratuitos que luego deberá convertir a un formato que satisfaga el lector de corpus NTLK adecuado, y luego puede usar esto para entrenar a un etiquetador POS para el idioma alemán.

Incluso puedes crear tu propio corpus, pero ese es un trabajo muy arduo; si trabajas en una universidad, debes encontrar formas de sobornar y coaccionar a los estudiantes para que lo hagan por ti ;-)

Posiblemente pueda usar el etiquetador Stanford POS. A continuación hay una receta que escribí. Hay compilaciones de Python para la PNL alemana que he compilado y puede acceder a ellas en 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

He escrito una publicación de blog sobre cómo convertir el Corpus TIGER anotado en alemán para usarlo con el NLTK. Míralo aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top