【问题标题】:"ImportError: cannot import name StanfordNERTagger" in NLTKNLTK 中的“ImportError:无法导入名称 StanfordNERTagger”
【发布时间】:2015-09-18 13:02:28
【问题描述】:

我无法在 NLTK 中导入 NER Stanford Tagger。这就是我所做的:

here下载java代码 并添加了一个环境变量STANFORD_MODELS,其中包含存储java代码的文件夹的路径。

根据 NLTK 网站上提供的信息,这应该足够了。它说:

“标记模型需要从http://nlp.stanford.edu/software 和 STANFORD_MODELS 环境变量集(以冒号分隔的路径列表)下载。”

有人愿意帮助我吗?

编辑:下载的文件夹位于 /Users/-----------/Documents/JavaJuno/stanford-ner-2015-04-20 并包含以下文件:

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

然后我添加了一个环境变量 STANFORD_MODELS:

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

从 nltk.tag import StanfordNERTagger 调用会产生错误:

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

ImportError: cannot import name StanfordNERTagger

如果这可能是相关的,这就是我的 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:我已成功导入 NER 标记器,方法是:

from nltk.tag.stanford import NERTagger

但现在从 NLTK 网站调用示例调用时,我得到:

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>
===========================================================================

所以我错误地设置了环境变量。有人可以帮我吗?

【问题讨论】:

  • 我只看到了第一个问题,这没有帮助。第二个问题基本上是我的问题,答案说需要这样做:“...把它[下载的斯坦福文件夹]放在路径指示的地方,并将NLKT文档中描述的路径中的目录名称更改为任何人想为目录使用的名称”,但我不知道该怎么做。
  • 我想他可能在谈论做这里建议的事情stackoverflow.com/questions/7344916/…你能发布你正在使用的代码吗?
  • 我已经用代码编辑了问题。
  • 我已经成功导入了标注器,但是我好像设置环境变量不正确,因为python找不到jar文件,见EDIT2。

标签: python nlp nltk


【解决方案1】:

我解决了。

  1. 像你一样设置 STANFORD_MODELS #我向你学习,谢谢!
  2. 将 nltk.tag.stanford 导入为 st
  3. tagger = st.StanfordNERTagger(PATH_TO_GZ, PATH_TO_JAR) # 这里 PATH_TO_GZ 和 PATH_TO_JAR 是我存储文件“all.3class.distim.crf.ser.gz”和文件“stanford-ner.jar”的完整路径"
  4. 现在标记器可以使用了。 # try tagger.tag('Rami Eid 在纽约石溪大学学习'​​.split())

与 CLASSPATH 无关。

希望对你有帮助!

【讨论】:

  • 第 3 步出现以下错误:AttributeError: 'module' object has no attribute 'StanfordNERTagger'
  • 一年前写的。也许新版本改名了?尝试查看 nltk.tag.stanford 的文档,看看执行 NER 标记的组件的名称是什么。
  • 您究竟是如何设置 STANFORD_MODELS 变量的?
  • @MERose export STANFORD_MODELS="the/complete/directory/path"
  • 在哪里可以找到 PATH_TO_GZ 和 PATH_TO_JAR?
【解决方案2】:

试试这个方法:

from nltk.tag.stanford import StanfordNERTagger
st = StanfordNERTagger('/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())

为我工作!

【讨论】:

    【解决方案3】:

    这是另一种方法:

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

    NERTagger 有两个参数:模型文件的路径和 jar 文件的路径。

    【讨论】:

      【解决方案4】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-31
        • 2014-10-10
        • 2014-09-20
        • 2014-08-28
        • 2014-06-10
        • 2016-05-16
        • 2019-05-25
        • 2017-04-22
        相关资源
        最近更新 更多