2009-10-28 15 views
22

estoy usando NLTK para extraer nombres a partir de una cadena de texto que comienzan con el siguiente comando:etiquetado POS en alemán

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

Funciona bien en Inglés. ¿Hay alguna manera fácil de hacerlo funcionar para el alemán también?

(no tengo experiencia con la programación en lenguaje natural, pero me las arreglé para utilizar la biblioteca NLTK pitón que es grande hasta el momento.)

+1

Una de las ventajas es posible explotar es que todos los sustantivos se capitalizan en alemán. –

+2

Etiqueta 'german' eliminada como parte de la [** 2012 limpieza **] (http://meta.stackexchange.com/questions/128315/the-great-stack-overflow-tag-question-cleanup-of-2012) –

Respuesta

20

software de lenguaje natural hace su magia mediante el aprovechamiento de los corpus y las estadísticas que proporcionan. Tendrás que decirle a nltk acerca de algún corpus alemán para ayudarlo a tokenar el alemán correctamente. Creo que el corpus EUROPARL podría ayudarlo a comenzar.

Ver nltk.corpus.europarl.german - esto es lo que estás buscando.

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

+2

+1 por darme un golpe ;-), también gracias por la sugerencia de etiquetar la pregunta en sí. – mjv

+1

Thx. Obtuve el archivo alemán del corpus EUROPAL con su ayuda y otra sugerencia útil. http://code.google.com/p/nltk/issues/detail? id = 415 En el entrenamiento del tokenizer. Johannes –

+3

Con el módulo 'europarl_raw' solo puede entrenar un tokenizador pero no un etiquetador de POS porque el corpus no está etiquetado como POS. –

4

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

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

Incluso puedes crear tu propio corpus, pero es un trabajo extenuante; si trabajas en una universidad, tienes que encontrar formas de sobornar y obligar a los estudiantes a hacer eso por ti ;-)

2

He escrito una publicación en un blog sobre cómo convertir el TIGER Corpus anotado alemán para usarlo con el NLTK. Have a look at it here.

+5

La publicación de blog referenciada ya no está disponible. – Tim

+0

¡Se actualizó el enlace a la publicación del blog! – b3000

11

El Pattern library incluye una función para analizar oraciones alemanas y el resultado incluye las etiquetas de voz parcial. A continuación 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 la etiqueta SSTS ajustado se puede establecer el parámetro opcional tagset="STTS".

4

Posiblemente pueda utilizar el rotulador de POS de Stanford. A continuación hay una receta que escribí. Hay recetas para pitón PNL alemana que he compilado y se puede acceder a ellos 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 
+0

El enlace es 404 – b3000

+1

Lo sentimos, aquí hay un enlace actualizado http://goo.gl/wdnz1W – alvas