tutorial stopwords graphs functions español ejemplo python nlp nltk

python - stopwords - Etiquetado POS en alemán



nltk stopwords (5)

Estoy usando NLTK para extraer nombres 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 una manera fácil de hacer que funcione para el alemán también?

(No tengo experiencia con la programación en lenguaje natural, pero me las arreglé para usar la biblioteca nltk de python, que es excelente hasta ahora).


El etiquetado de parte del discurso (POS) es muy específico para un lenguaje [natural] particular. NLTK incluye muchos etiquetadores diferentes, que utilizan distintas técnicas para inferir la etiqueta de un token dado en un token dado. La mayoría (pero no todos) de estos etiquetadores utilizan un modelo estadístico de tipo como el dispositivo principal o único para "hacer el truco". Dichos 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" de NTLK incluye muchos de estos corpus, así como un conjunto de "lectores de corpus" que proporcionan una API para leer diferentes tipos de corpus. No conozco el estado de cosas en NTLK propiamente dicho, y si esto incluye algún corpus alemán. Sin embargo, puede encontrar gratis algunos corpus gratuitos que luego deberá convertir a un formato que satisfaga al lector de corpus NTLK adecuado, y luego puede usar esto para capacitar a un etiquetador POS para el idioma alemán.

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


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

Consulte nltk.corpus.europarl_raw y esta respuesta para la configuración de ejemplo.

También, considere etiquetar esta pregunta con "nlp".


He escrito un blog sobre cómo convertir el Corpus TIGER anotado alemán para usarlo con el NLTK. Échale un vistazo aquí.


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 configurar el parámetro opcional tagset="STTS" .


Posiblemente puede utilizar el etiquetador POS Stanford. A continuación hay una receta que escribí. Hay recetas de Python para la PNL alemana que he compilado y puedes 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