nltk StanfordNERTagger : NoClassDefFoundError: org/slf4j/LoggerFactory (In Windows)

后端 未结 9 2095
轮回少年
轮回少年 2020-12-15 09:43

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

I am trying to use nltk for NER as

import nl         


        
9条回答
  •  孤街浪徒
    2020-12-15 10:37

    NOTE:

    Below is a temporal hack to work with:

    • NLTK version 3.1
    • Stanford NER compiled on 2015-12-09

    This solution is NOT meant to be an eternal solution.

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

    Please track updates on this issue if you do not want to use this "hack": https://github.com/nltk/nltk/issues/1237 or please use the NER tool compield on 2015-04-20.


    In Short

    Make sure that you have:

    • NLTK version 3.1
    • Stanford NER compiled on 2015-12-09
    • Set the environment variables for CLASSPATH and STANFORD_MODELS

    To set environment variables in 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
    

    To set environment variables in Linux:

    export STANFORDTOOLSDIR=/home/some/path/to/stanfordtools/
    export CLASSPATH=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/stanford-ner.jar
    export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/classifiers
    

    Then:

    >>> from nltk.internals import find_jars_within_path
    >>> from nltk.tag import StanfordNERTagger
    >>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
    # Note this is where your stanford_jar is saved.
    # We are accessing the environment variables you've 
    # set through the NLTK API.
    >>> print st._stanford_jar
    /home/alvas/stanford-ner-2015-12-09/stanford-ner.jar
    >>> stanford_dir = st._stanford_jar.rpartition("\\")[0] # windows
    # Note in linux you do this instead: 
    >>> stanford_dir = st._stanford_jar.rpartition('/')[0] # linux
    # Use the `find_jars_within_path` function to get all the
    # jar files out from stanford NER tool under the libs/ dir.
    >>> stanford_jars = find_jars_within_path(stanford_dir)
    # Put the jars back into the `stanford_jar` classpath.
    >>> st._stanford_jar = ':'.join(stanford_jars) # linux
    >>> st._stanford_jar = ';'.join(stanford_jars) # windows
    >>> 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')]
    

提交回复
热议问题