代码之家  ›  专栏  ›  技术社区  ›  Cameron M.

埃杜。斯坦福大学。自然语言处理。util。ReflectionLoading$ReflectionLoadingException当将CoreNLP与Jython一起使用时

  •  0
  • Cameron M.  · 技术社区  · 7 年前

    from edu.stanford.nlp.simple import *
    s = Sentence("This is a test.")
    ss = s.nerTags()
    print(s)
    print(ss)
    

    Connected to pydev debugger (build 172.4155.5)
    [MainThread] INFO edu.stanford.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [0.4 sec].
    [MainThread] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [0.8 sec].
    [MainThread] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [0.4 sec].
    [MainThread] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [0.4 sec].
    [MainThread] INFO edu.stanford.nlp.time.JollyDayHolidays - Initializing JollyDayHoliday for SUTime from classpath edu/stanford/nlp/models/sutime/jollyday/Holidays_sutime.xml as sutime.binder.1.
    Traceback (most recent call last):
      File "C:\Users\user\.IntelliJIdea2017.2\config\plugins\python\helpers\pydev\pydevd.py", line 1599, in <module>
        globals = debugger.run(setup['file'], None, None, is_module)
      File "C:\Users\user\.IntelliJIdea2017.2\config\plugins\python\helpers\pydev\pydevd.py", line 1026, in run
        pydev_imports.execfile(file, globals, locals)  # execute the script
      File "C:/Users/user/IdeaProjects/nlptest/src/test.py", line 3, in <module>
        ss = s.nerTags()
        at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:40)
        at edu.stanford.nlp.time.TimeExpressionExtractorFactory.create(TimeExpressionExtractorFactory.java:57)
        at edu.stanford.nlp.time.TimeExpressionExtractorFactory.createExtractor(TimeExpressionExtractorFactory.java:38)
        at edu.stanford.nlp.ie.regexp.NumberSequenceClassifier.<init>(NumberSequenceClassifier.java:86)
        at edu.stanford.nlp.ie.NERClassifierCombiner.<init>(NERClassifierCombiner.java:136)
        at edu.stanford.nlp.pipeline.NERCombinerAnnotator.<init>(NERCombinerAnnotator.java:91)
        at edu.stanford.nlp.pipeline.AnnotatorImplementations.ner(AnnotatorImplementations.java:70)
        at edu.stanford.nlp.simple.Document$2.get(Document.java:115)
        at edu.stanford.nlp.simple.Document$2.get(Document.java:109)
        at edu.stanford.nlp.simple.Document.runNER(Document.java:886)
        at edu.stanford.nlp.simple.Sentence.nerTags(Sentence.java:528)
        at edu.stanford.nlp.simple.Sentence.nerTags(Sentence.java:536)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
    edu.stanford.nlp.util.ReflectionLoading$ReflectionLoadingException: edu.stanford.nlp.util.ReflectionLoading$ReflectionLoadingException: Error creating edu.stanford.nlp.time.TimeExpressionExtractorImpl
    

    我使用我的IDE将CoreNLP目录添加到我的类路径中,Jython似乎可以找到它。关于错误有几个类似的问题,但他们的解决方案(如果有的话)实际上都不适合我。还有其他人找到这个问题的解决方案吗?

    编辑(我尝试在Windows上使用Bash):

    user@user:~/uh$ export JYTHONPATH="/home/user/uh/stanford-corenlp-full-2017-06-09/*:"    
    user@user:~/uh$ jython
    Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11)
    [OpenJDK 64-Bit Server VM (Oracle Corporation)] on java1.8.0_131
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from edu.stanford.nlp.simple import *
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named edu
    >>>
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Cameron M.    7 年前

    我的进一步测试表明,这纯粹是一个Jython问题,也是一个跨平台的问题。我在Windows、Ubuntu和Mac上测试了类似的设置,导致了相同的错误。即使运行旨在将初始管道返回给Jython的纯Java代码,也会返回相同的错误。但是,可以通过以下方法将“ner.useSUTime”设置为false来避免错误:

    props.setProperty("ner.useSUTime", "0")
    
        2
  •  0
  •   Christopher Manning    7 年前

    我不确定发生了什么。您使用的是什么版本的CoreNLP?在命令行工作时,我无法再现这个问题。见下文。所以,我的前两个问题是:你在使用最新的CoreNLP吗?(如果没有,请尝试升级。)这在命令行中适用吗?(在这种情况下,只有IntelliJ中的使用存在问题-不确定那里会发生什么,但与反射和类加载器的工作方式有关?)

    ==> Pouring jython-2.7.1.sierra.bottle.tar.gz
    🍺  /usr/local/Cellar/jython/2.7.1: 3,797 files, 147.4MB
    $ export JYTHONPATH="/Users/manning/Software/stanford-corenlp-full-2017-06-09/*:"
    $ jython
    Jython 2.7.1 (default:0df7adb1b397, Jun 30 2017, 19:02:43) 
    [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_65
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from edu.stanford.nlp.simple import *
    >>> s = Sentence("This is a test.")
    >>> ss = s.nerTags()
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/Users/manning/git/javanlp/projects/core/lib/slf4j-simple.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/Users/manning/Software/stanford-corenlp-full-2017-06-09/slf4j-simple.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
    [main] INFO edu.stanford.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [0.7 sec].
    [main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [0.9 sec].
    [main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [0.6 sec].
    [main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [2.4 sec].
    [main] INFO edu.stanford.nlp.time.JollyDayHolidays - Initializing JollyDayHoliday for SUTime from classpath edu/stanford/nlp/models/sutime/jollyday/Holidays_sutime.xml as sutime.binder.1.
    >>> print(s)
    This is a test.
    >>> print(ss)
    [O, O, O, O, O]
    >>> s2 = Sentence("Chris joined Stanford in 1999");
    >>> ss2 = s2.nerTags()
    >>> print(ss2)
    [PERSON, O, ORGANIZATION, O, DATE]
    >>>