HINWEIS: Ich verwende Python 2.7 als Teil der Anaconda-Distribution. Ich hoffe, das ist kein Problem für Nltk 3.1.nltk StanfordNERTagger: NoClassDefFoundError: org/slf4j/LoggerFactory (unter Windows)
Ich versuche, für NER zu verwenden nltk als
import nltk
from nltk.tag.stanford import StanfordNERTagger
#st = StanfordNERTagger('stanford-ner/all.3class.distsim.crf.ser.gz', 'stanford-ner/stanford-ner.jar')
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
print st.tag(str)
aber ich bekomme
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at edu.stanford.nlp.io.IOUtils.<clinit>(IOUtils.java:41)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1117)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1076)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1057)
at edu.stanford.nlp.ie.crf.CRFClassifier.main(CRFClassifier.java:3088)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
Traceback (most recent call last):
File "X:\jnk.py", line 47, in <module>
print st.tag(str)
File "X:\Anaconda2\lib\site-packages\nltk\tag\stanford.py", line 66, in tag
return sum(self.tag_sents([tokens]), [])
File "X:\Anaconda2\lib\site-packages\nltk\tag\stanford.py", line 89, in tag_sents
stdout=PIPE, stderr=PIPE)
File "X:\Anaconda2\lib\site-packages\nltk\internals.py", line 134, in java
raise OSError('Java command failed : ' + str(cmd))
OSError: Java command failed : ['X:\\PROGRA~1\\Java\\JDK18~1.0_6\\bin\\java.exe', '-mx1000m', '-cp', 'X:\\stanford\\stanford-ner.jar', 'edu.stanford.nlp.ie.crf.CRFClassifier', '-loadClassifier', 'X:\\stanford\\classifiers\\english.all.3class.distsim.crf.ser.gz', '-textFile', 'x:\\appdata\\local\\temp\\tmpqjsoma', '-outputFormat', 'slashTags', '-tokenizerFactory', 'edu.stanford.nlp.process.WhitespaceTokenizer', '-tokenizerOptions', '"tokenizeNLs=false"', '-encoding', 'utf8']
, aber ich kann sehen, dass die slf4j Glas in meinem lib Ordner gibt. Muss ich eine Umgebungsvariable aktualisieren?
bearbeiten
Vielen Dank allen für ihre Hilfe, aber ich immer noch die gleichen Fehler. Hier ist, was ich vor kurzem versucht,
import nltk
from nltk.tag import StanfordNERTagger
print(nltk.__version__)
stanford_ner_dir = 'X:\\stanford\\'
eng_model_filename= stanford_ner_dir + 'classifiers\\english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir + 'stanford-ner.jar'
st = StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
print st._stanford_model
print st._stanford_jar
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
und auch
import nltk
from nltk.tag import StanfordNERTagger
print(nltk.__version__)
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
print st._stanford_model
print st._stanford_jar
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
i bekommen
3.1
X:\stanford\classifiers\english.all.3class.distsim.crf.ser.gz
X:\stanford\stanford-ner.jar
nach, dass es weitergeht wie bisher die gleiche Stacktrace zu drucken. java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
eine Idee, warum dies passieren könnte? Ich habe auch meinen CLASSPATH aktualisiert. Ich habe sogar alle relevanten Ordner zu meiner PATH-Umgebungsvariablen hinzugefügt. Zum Beispiel den Ordner, in dem ich die Stanford-Jars entpackt habe, den Ort, an dem ich Slf4j entpackt habe und sogar den lib-Ordner im Stanford-Ordner. Ich habe keine Ahnung, warum dies geschieht :(
Könnte es sein Fenster? Ich habe
aktualisieren
Die Stanford NER Version Ich habe vor Probleme mit Windows-Pfade haben ist 3.6.0 Die Zip-Datei sagt
stanford-ner-2015-12-09.zip
Ich versuchte auch mit der
stanford-ner-3.6.0.jar
anstelle vonstanford-ner.jar
aber immer noch die gleichen FehlerWenn ich nach rechts auf dem
stanford-ner-3.6.0.jar
klicken, merke ich
ich dies sehen für alle Dateien, die ich gewonnen habe, auch die slf4j files.could verursacht das das Problem?
- Schließlich warum die Fehlermeldung sagen
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
ich sehe keinen Ordner mit dem Namen org
überall
Update: Env Variablen
Hier sind meine env Variablen
CLASSPATH
.;
X:\jre1.8.0_60\lib\rt.jar;
X:\stanford\stanford-ner-3.6.0.jar;
X:\stanford\stanford-ner.jar;
X:\stanford\lib\slf4j-simple.jar;
X:\stanford\lib\slf4j-api.jar;
X:\slf4j\slf4j-1.7.13\slf4j-1.7.13\slf4j-log4j12-1.7.13.jar
STANFORD_MODELS
X:\stanford\classifiers
JAVA_HOME
X:\PROGRA~1\Java\JDK18~1.0_6
PATH
X:\PROGRA~1\Java\JDK18~1.0_6\bin;
X:\stanford;
X:\stanford\lib;
X:\slf4j\slf4j-1.7.13\slf4j-1.7.13
irgendetwas falsch hier?
Wenn ich Ihr Beispielskript ausgeführt habe, habe ich den Fehler "" "Setzen Sie die CLASSPATH-Umgebungsvariable." "" Also ja, ich würde annehmen, Sie müssen es aktualisieren –
classpath zeigt bereits auf den Ordner, in dem Stanford-Zeug entpackt wurde. Ich frage mich, ob ich auch den Pfad zum lib-Ordner im Klassenpfad – AbtPst
http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford hinzufügen sollte, wenn Sie das nicht überprüft haben noch –