Configuración de NLTK con Stanford NLP (tanto StanfordNERTagger como StanfordPOSTagger) para español

La documentación de NLTK es bastante pobre en esta integración. Los pasos que seguí fueron:

Luego en una consola ipython :

En [11]: importar nltk

 In [12]: nltk.__version__ Out[12]: '3.1' In [13]: from nltk.tag import StanfordNERTagger 

Entonces

 st = StanfordNERTagger('/home/me/stanford/stanford-postagger-full-2015-04-20.zip', '/home/me/stanford/stanford-spanish-corenlp-2015-01-08-models.jar') 

Pero cuando intenté ejecutarlo:

 st.tag('Adolfo se la pasa corriendo'.split()) Error: no se ha encontrado o cargado la clase principal edu.stanford.nlp.ie.crf.CRFClassifier --------------------------------------------------------------------------- OSError Traceback (most recent call last)  in () ----> 1 st.tag('Adolfo se la pasa corriendo'.split()) /home/nanounanue/.pyenv/versions/3.4.3/lib/python3.4/site-packages/nltk/tag/stanford.py in tag(self, tokens) 64 def tag(self, tokens): 65 # This function should return list of tuple rather than list of list ---> 66 return sum(self.tag_sents([tokens]), []) 67 68 def tag_sents(self, sentences): /home/nanounanue/.pyenv/versions/3.4.3/lib/python3.4/site-packages/nltk/tag/stanford.py in tag_sents(self, sentences) 87 # Run the tagger and get the output 88 stanpos_output, _stderr = java(cmd, classpath=self._stanford_jar, ---> 89 stdout=PIPE, stderr=PIPE) 90 stanpos_output = stanpos_output.decode(encoding) 91 /home/nanounanue/.pyenv/versions/3.4.3/lib/python3.4/site-packages/nltk/__init__.py in java(cmd, classpath, stdin, stdout, stderr, blocking) 132 if p.returncode != 0: 133 print(_decode_stdoutdata(stderr)) --> 134 raise OSError('Java command failed : ' + str(cmd)) 135 136 return (stdout, stderr) OSError: Java command failed : ['/usr/bin/java', '-mx1000m', '-cp', '/home/nanounanue/Descargas/stanford-spanish-corenlp-2015-01-08-models.jar', 'edu.stanford.nlp.ie.crf.CRFClassifier', '-loadClassifier', '/home/nanounanue/Descargas/stanford-postagger-full-2015-04-20.zip', '-textFile', '/tmp/tmp6y169div', '-outputFormat', 'slashTags', '-tokenizerFactory', 'edu.stanford.nlp.process.WhitespaceTokenizer', '-tokenizerOptions', '"tokenizeNLs=false"', '-encoding', 'utf8'] 

Lo mismo ocurre con el StandfordPOSTagger

NOTA : Necesito que esta sea la versión en español. NOTA : estoy ejecutando esto en python 3.4.3

Tratar:

 # StanfordPOSTagger from nltk.tag.stanford import StanfordPOSTagger stanford_dir = '/home/me/stanford/stanford-postagger-full-2015-04-20/' modelfile = stanford_dir + 'models/english-bidirectional-distsim.tagger' jarfile = stanford_dir + 'stanford-postagger.jar' st = StanfordPOSTagger(model_filename=modelfile, path_to_jar=jarfile) # NERTagger stanford_dir = '/home/me/stanford/stanford-ner-2015-04-20/' jarfile = stanford_dir + 'stanford-ner.jar' modelfile = stanford_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz' st = StanfordNERTagger(model_filename=modelfile, path_to_jar=jarfile) 

Para obtener información detallada sobre la API de NLTK con las herramientas de Stanford, eche un vistazo a: https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software#stanford-tagger-ner-tokenizer-and-parser

Nota: Las API de NLTK son para las herramientas individuales de Stanford. Si está utilizando la NLP de Stanford Core, es mejor seguir las instrucciones de @dimazest en http://www.eecs.qmul.ac.uk/~dm303/stanford-dependency- analizador-nltk-y-anaconda.html


Editado

En cuanto al etiquetado NER en español, le sugiero encarecidamente que utilice Stanford Core NLP ( http://nlp.stanford.edu/software/corenlp.shtml ) en lugar de usar el paquete NER de Stanford ( http://nlp.stanford.edu/ software / CRF-NER.shtml ). Y siga la solución @dimazest para leer archivos JSON.

Alternativamente, si debe usar el paquete NER, puede seguir las instrucciones de https://github.com/alvations/nltk_cli ( Exención de responsabilidad : Este repository no está oficialmente asociado con NLTK). Haga lo siguiente en la línea de comandos de Unix:

 cd $HOME wget http://nlp.stanford.edu/software/stanford-spanish-corenlp-2015-01-08-models.jar unzip stanford-spanish-corenlp-2015-01-08-models.jar -d stanford-spanish cp stanford-spanish/edu/stanford/nlp/models/ner/* /home/me/stanford/stanford-ner-2015-04-20/ner/classifiers/ 

Luego en python:

 # NERTagger stanford_dir = '/home/me/stanford/stanford-ner-2015-04-20/' jarfile = stanford_dir + 'stanford-ner.jar' modelfile = stanford_dir + 'classifiers/spanish.ancora.distsim.s512.crf.ser.gz' st = StanfordNERTagger(model_filename=modelfile, path_to_jar=jarfile) 

El error está en los argumentos escritos para la función StanfordNerTagger.

El primer argumento debe ser un archivo modelo o el clasificador que está utilizando. Puede encontrar ese archivo dentro del archivo zip de Stanford. Por ejemplo:

  st = StanfordNERTagger('/home/me/stanford/stanford-postagger-full-2015-04-20/classifier/tagger.ser.gz', '/home/me/stanford/stanford-spanish-corenlp-2015-01-08-models.jar')