2015-09-18 12 views
7

Non riesco a importare il NER Stanford Tagger in NLTK. Questo è quello che ho fatto:"ImportError: impossibile importare il nome StanfordNERTagger" in NLTK

scaricato il codice Java da here e ha aggiunto una variabile d'ambiente STANFORD_MODELS con il percorso della cartella in cui è memorizzato il codice Java.

Questo dovrebbe essere sufficiente in base alle informazioni fornite sul sito NLTK. Dice:

"I modelli di Tagger devono essere scaricati da http://nlp.stanford.edu/software e il set di variabili di ambiente STANFORD_MODELS (un elenco di percorsi separati da due punti)."

Qualcuno potrebbe essere così gentile da aiutarmi, per favore?

EDIT: La cartella scaricata si trova in/Users/-----------/Documents/JavaJuno/Stanford-ner-2015/04/20 e contiene questi file:

LICENSE.txt   lib    ner.sh    stanford-ner-3.5.2-javadoc.jar 
NERDemo.java   ner-gui.bat   sample-conll-file.txt  stanford-ner-3.5.2-sources.jar 
README.txt   ner-gui.command   sample-w-time.txt  stanford-ner-3.5.2.jar 
build.xml   ner-gui.sh   sample.ner.txt   stanford-ner.jar 
classifiers   ner.bat    sample.txt 

Poi ho aggiunto un ambiente STANFORD_MODELS variabili:

os.environ["STANFORD_MODELS"] = "/Users/-----------/Documents/JavaJuno/stanford-ner-2015-04-20" 

chiamando da nltk.tag importazione StanfordNERTagger rese l'errore:

ImportError        Traceback (most recent call last) 
<ipython-input-356-f4287e573edc> in <module>() 
----> 1 from nltk.tag import StanfordNERTagger 

ImportError: cannot import name StanfordNERTagger 

Anche nel caso in cui questo può essere rilevante, questo è ciò che è nella mia cartella nltk.tag:

__init__.py api.pyc  crf.py  hmm.pyc  senna.py sequential.pyc stanford.py tnt.pyc 
__init__.pyc brill.py crf.pyc  hunpos.py senna.pyc simplify.py stanford.pyc util.py 
api.py  brill.pyc hmm.py  hunpos.pyc sequential.py simplify.pyc tnt.py  util.pyc 

EDIT2: sono riuscito a importare il NER Tagger, utilizzando:

from nltk.tag.stanford import NERTagger 

ma ora quando si chiama una chiamata ad esempio dal sito NLTK, ottengo:

In [360]: st = NERTagger('english.all.3class.distsim.crf.ser.gz') 
--------------------------------------------------------------------------- 
LookupError        Traceback (most recent call last) 
<ipython-input-360-0c0ab770b0ff> in <module>() 
----> 1 st = NERTagger('english.all.3class.distsim.crf.ser.gz') 

/Library/Python/2.7/site-packages/nltk/tag/stanford.pyc in __init__(self, *args, **kwargs) 
    158 
    159  def __init__(self, *args, **kwargs): 
--> 160   super(NERTagger, self).__init__(*args, **kwargs) 
    161 
    162  @property 

/Library/Python/2.7/site-packages/nltk/tag/stanford.pyc in __init__(self, path_to_model, path_to_jar, encoding, verbose, java_options) 
    40     self._JAR, path_to_jar, 
    41     searchpath=(), url=_stanford_url, 
---> 42     verbose=verbose) 
    43 
    44   self._stanford_model = find_file(path_to_model, 

/Library/Python/2.7/site-packages/nltk/__init__.pyc in find_jar(name, path_to_jar, env_vars, searchpath, url, verbose) 
    595      (name, url)) 
    596  div = '='*75 
--> 597  raise LookupError('\n\n%s\n%s\n%s' % (div, msg, div)) 
    598 
    599 ########################################################################## 

LookupError: 

=========================================================================== 
    NLTK was unable to find stanford-ner.jar! Set the CLASSPATH 
    environment variable. 

    For more information, on stanford-ner.jar, see: 
    <http://nlp.stanford.edu/software> 
=========================================================================== 

Così ho impostato in modo non corretto la variabile d'ambiente. Qualcuno può aiutarmi con quello?

+0

hai provato uno di questi: http://stackoverflow.com/questions/8555312/instantiating-and-using-stanfordtagger-within-nltk http://stackoverflow.com/questions/23861355/ how-to-install-and-invoke-stanford-nertagger – Chrisrs2292

+0

Ho visto solo la prima domanda, che non è stata di aiuto. La seconda domanda è fondamentalmente il mio problema, la risposta dice che questo deve essere fatto: "... mettilo [la cartella Stanford scaricata] nel posto indicato dal percorso e cambia il nome della directory nel percorso descritto nel documento NLKT qualunque nome si voglia usare per la directory ", ma non sono sicuro di come farlo. – eager2learn

+0

Penso che stia parlando di fare ciò che è suggerito qui http://stackoverflow.com/questions/7344916/trouble-importing-stanford-pos-tagger-into-nltk potresti pubblicare il codice che stai utilizzando? – Chrisrs2292

risposta

4

L'ho risolto.

  1. imposta STANFORD_MODELS come hai fatto # Ho imparato da te, grazie!
  2. importazione nltk.tag.stanford come st
  3. tagger = st.StanfordNERTagger (PATH_TO_GZ, PATH_TO_JAR) # qui PATH_TO_GZ e PATH_TO_JAR sono il percorso completo dove memorizzare il file "all.3class.distsim.crf.ser. gz "e il file" stanford-ner.jar "
  4. ora il tagger è utilizzabile. # prova tagger.tag ('Rami Eid sta studiando alla Stony Brook University di NY'.split())

Non ha nulla a che vedere con CLASSPATH.

Spero che aiuti!

+1

Funziona per me, grazie – lenhhoxung

+0

Il passaggio 3 mi dà il seguente errore: 'AttributeError: oggetto 'module' non ha attributo 'StanfordNERTagger'' –

+0

È stato scritto un anno fa Forse la nuova versione ha cambiato il nome? Prova a consultare la documentazione di nltk.tag.stanford e vedi qual è il nome del componente che fa il tagging NER. – Skywalker326

1

Ecco un altro approccio:

from nltk.tag.stanford import NERTagger 
    import os 
    java_path = "/Java/jdk1.8.0_45/bin/java.exe" 
    os.environ['JAVAHOME'] = java_path 
    st = NERTagger('../ner-model.ser.gz','../stanford-ner.jar') 

Il NERTagger accetta due argomenti: il percorso del file del modello e il percorso del file jar.

2

provare questo approccio:

from nltk.tag.stanford import StanfordNERTagger 
st = StanfordNERTaggger('/usr/share/stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz','/usr/share/stanford-ner/stanford-ner.jar') 
st.tag(‘Rami Eid is studying at Stony Brook University in NY’.split()) 

lavorato per me!

0
from nltk.tag import StanfordNERTagger 
import os 

java_path = "C:/Program Files/Java/jdk1.8.0_121/bin/java.exe" 

os.environ['JAVAHOME'] = "JAVA_PATH" #this java path you get from command 'echo %PATH%'in terminal 

st = StanfordNERTagger('/usr/share/stanford ner/classifiers/english.all.3class.distsim.crf.ser.gz','/usr/share/stanford-ner/stanford-ner.jar',encoding='utf-8') #download 'stanford-postagger-2017-06-09' package and give the paths for.gz &.jar 
Problemi correlati