nltk StanfordNERTagger:NoClassDefFoundError:org/slf4j/LoggerFactory(在Windows中)

编程入门 行业动态 更新时间:2024-10-24 04:30:09
本文介绍了nltk StanfordNERTagger:NoClassDefFoundError:org/slf4j/LoggerFactory(在Windows中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

注意:我正在将Python 2.7用作Anaconda发行版的一部分.我希望这对nltk 3.1来说不是问题.

NOTE: I am using Python 2.7 as part of Anaconda distribution. I hope this is not a problem for nltk 3.1.

我正在尝试将nltk用于NER

I am trying to use nltk for NER as

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)

但是我得到

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.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']

但是我可以看到slf4j jar在我的lib文件夹中.我需要更新环境变量吗?

but i can see that the slf4j jar is there in my lib folder. do i need to update an environment variable?

修改

感谢大家的帮助,但我仍然遇到同样的错误.这是我最近尝试过的

Thanks everyone for their help, but i still get the same error. Here is what i tried recently

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())

还有

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())

我明白了

3.1 X:\stanford\classifiers\english.all.3class.distsim.crf.ser.gz X:\stanford\stanford-ner.jar

之后,它继续打印与以前相同的堆栈跟踪. java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

after that it goes on to print the same stacktrace as before. java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

知道为什么会发生这种情况吗?我也更新了CLASSPATH.我什至将所有相关文件夹添加到PATH环境变量中,例如解压stanford jars的文件夹,解压缩slf4j的位置,甚至stanford文件夹中的lib文件夹.我不知道为什么会这样:(

any idea why this might be happening? I updated my CLASSPATH as well. I even added all the relevant folders to my PATH environment variable.for example the folder where i unzipped the stanford jars, the place where i unzipped slf4j and even the lib folder inside the stanford folder. i have no idea why this is happening :(

可能是Windows吗?我以前在Windows路径上遇到过问题

更新

  • 我拥有的Stanford NER版本是3.6.0.压缩文件显示stanford-ner-2015-12-09.zip

    我也尝试使用stanford-ner-3.6.0.jar而不是stanford-ner.jar,但仍然出现相同的错误

    I also tried using the stanford-ner-3.6.0.jar instead of stanford-ner.jar but still get the same error

    当我右键单击stanford-ner-3.6.0.jar时,我注意到

    When i right click on the stanford-ner-3.6.0.jar, i notice

    我可以看到我提取的所有文件,甚至是slf4j文件.这是否可能导致问题?

  • 最后,为什么错误消息说
  • java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

    我在任何地方都看不到任何名为org的文件夹

    i do not see any folder named org anywhere

    更新:环境变量

    这是我的环境变量

    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

    这里有什么问题吗?

    推荐答案

    已编辑

    注意:以下答案仅适用于:

    EDITED

    Note: The following answer will only work on:

    • NLTK 3.1版
    • 斯坦福工具(Stanford Tools),自2015年4月20日起编译

    由于这两种工具的更改都非常快,并且API在3-6个月后看起来可能会非常不同.请将以下答案视为暂时性解决方案,而不是永恒的解决方案.

    As both tools changes rather quickly and the API might look very different 3-6 months later. Please treat the following answer as temporal and not an eternal fix.

    始终参考 github/nltk/nltk/wiki/Installing-Third-Party-Software 获取有关如何使用NLTK连接斯坦福NLP工具的最新说明!

    Always refer to github/nltk/nltk/wiki/Installing-Third-Party-Software for the latest instruction on how to interface Stanford NLP tools using NLTK!!

    首先使用将您的NLTK更新到版本3.1.

    First update your NLTK to the version 3.1 using

    pip install -U nltk

    或(对于Windows)使用 pypi.python/pypi下载最新的NLTK /nltk

    or (for Windows) download the latest NLTK using pypi.python/pypi/nltk

    然后使用以下命令检查您是否拥有3.1版:

    Then check that you have version 3.1 using:

    python3 -c "import nltk; print(nltk.__version__)"

    步骤2

    然后从 nlp下载zip文件.stanford.edu/software/stanford-ner-2015-04-20.zip 并解压缩文件并保存到C:\some\path\to\stanford-ner\(在Windows中)

    Step 2

    Then download the zip file from nlp.stanford.edu/software/stanford-ner-2015-04-20.zip and unzip the file and save to C:\some\path\to\stanford-ner\ (In windows)

    然后将CLASSPATH的环境变量设置为C:\some\path\to\stanford-ner\stanford-ner.jar

    Then set the environment variable for CLASSPATH to C:\some\path\to\stanford-ner\stanford-ner.jar

    和STANFORD_MODELS的环境变量 C:\some\path\to\stanford-ner\classifiers

    或在命令行中(仅适用于Windows ):

    set CLASSPATH=%CLASSPATH%;C:\some\path\to\stanford-ner\stanford-ner.jar set STANFORD_MODELS=%STANFORD_MODELS%;C:\some\path\to\stanford-ner\classifiers

    (请参阅 stackoverflow/a/17176423/610569 有关设置的Click-click GUI说明Windows中的环境变量)

    (See stackoverflow/a/17176423/610569 for click-click GUI instructions for setting environment variables in Windows)

    (有关在以下环境中设置环境变量的详细信息,请参见 Stanford Parser和NLTK Linux)

    (See Stanford Parser and NLTK for details on setting environment variables in Linux)

    然后在python中

    >>> from nltk.tag import StanfordNERTagger >>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') >>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split()) [(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]

    不设置环境变量,您可以尝试:

    Without setting the environment variables, you can try:

    from nltk.tag import StanfordNERTagger stanford_ner_dir = 'C:\\some\path\to\stanford-ner\' 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) st.tag('Rami Eid is studying at Stony Brook University in NY'.split())

    请参见 Stanford Parser和NLTK

    更多推荐

    nltk StanfordNERTagger:NoClassDefFoundError:org/slf4j/LoggerFactory(在Windows中)

    本文发布于:2023-11-14 10:18:01,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1586952.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:NoClassDefFoundError   StanfordNERTagger   nltk   org   Windows

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!