我无法使斯坦福解析器3.5.1版正常工作。我知道可以使用此工具的较新版本,但是使用此特定版本时,我有很多旧代码。我确实需要这几天才能开始工作,我的课程有最后期限,而且很快!
我正在使用Windows 7,JDK 1.8.0_65,python 3.3.3和NLTK 3.0.2
我的环境变量如下:
CLASSPATH : C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\stanford-parser-3.5.1-models.jar;C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\stanford-parser-3.5.1-sources.jar;C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\stanford-parser.jar
JAVA_HOME : C:\Program Files\Java\jdk1.8.0_65\bin
Path : C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Common Files\Apple\Internet Services\;C:\Program Files\Git\cmd;C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\
我运行此代码:
从nltk.parse导入斯坦福大学开始
解析器= stanford.StanfordParser(model_path ='C:\ Program Files(x86)\ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz')
parser.raw_parse('我爱苹果')
我收到此错误
从序列化文件C:\ Program Files中加载解析器(x86)\ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz...
java.io.IOException:无法解析“ C:\ Program Files(x86)\ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz“作为类路径,文件名或URL
在edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:463)
在edu.stanford.nlp.io.IOUtils.readStreamFromString(IOUtils.java:396)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromSerializedFile(LexicalizedParser.java:599)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile(LexicalizedParser.java:394)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:181)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.main(LexicalizedParser.java:1395)
从文本文件C:\ Program Files中加载解析器(x86)\ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gzjava.io.IOException:无法解析“ C:\ Program Files(x86)\ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz“作为类路径,文件名或URL
在edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:463)
在edu.stanford.nlp.io.IOUtils.readerFromString(IOUtils.java:591)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromTextFile(LexicalizedParser.java:533)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile(LexicalizedParser.java:396)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:181)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.main(LexicalizedParser.java:1395)
线程“主”中的异常java.lang.NullPointerException
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:183)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.main(LexicalizedParser.java:1395)
追踪(最近一次通话):文件“ C:\ Users \ Zimtyth \ Desktop \ PFE \Implémentation\ Codes \ Codefinal \ Lib_Stanford_Parser.py”,第100行,在resultat = parse_sent(“我叫Melroy,我想赢。”)文件“ C:\ Users \ Zimtyth \ Desktop \ PFE \Implémentation\ Codes \ Codefinal \ Lib_Stanford_Parser.py“,行10,在parse_sent中返回parser.raw_parse(sent)文件“ C:\ Python33 \ lib \ site-packages \ nltk \ parse \ stanford.py”,第152行,在raw_parse返回next(self.raw_parse_sents([sentence],verbose))文件“ C:\ Python33 \ lib \ site-packages \ nltk \ parse \ stanford.py”,行170,在raw_parse_sents返回self._parse_trees_output(self._execute(cmd,'\ n'.join(sentences),verbose))文件“ C:\ Python33 \ lib \ site-packages \ nltk \ parse \ stanford.py”,第230行,在_执行stdout = PIPE,stderr = PIPE)文件“ C:\ Python33 \ lib \ site-packages \ nltk \ internals.py”,行161,在Java中引发OSError('Java命令失败:'+ str(cmd))OSError:Java命令失败:['C:\ ProgramFiles \ Java \ jdk1.8.0_65 \ bin \ java.exe','-mx1000m','-cp','C:\ Program文件(x86)\ stanford-parser-full-2015-01-30 \ jars \ stanford-parser.jar; C:\ Program档案(x86)\ stanford-parser-full-2015-01-30 \ jars \ stanford-parser-3.5.1-models.jar','edu.stanford.nlp.parser.lexparser.LexicalizedParser','-model','C:\ Program文件(x86)\ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz','-句子','换行','-outputFormat','penn','-encoding','utf8','c:\ users \ zimtyth \ appdata \ local \ temp \ tmpbf5zdg']
我已经在[SO]中检查了几个类似this的答案,但仍然无法使它起作用。看来是Java问题,请告诉我我在做什么错?
我想您的代码不正确,并且在'C:\Program Files (x86)\stanford-parser-full-2015-01-30\edu\stanford\lp\models\lexparser\englishPCFG.ser.gz'
位置没有任何文件。
如果模型jar文件位于您的类路径中,则应该能够通过提供模型路径(在jar文件内部)来使事情正常进行:
parser = stanford.StanfordParser(model_path='edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz')
另一种选择是扩展jar文件(jar -xf
),然后将有一个englishPCFG.ser.gz文件,您可以将其作为model_path
的参数。
ps.s。对于在2019年以上阅读过此书的其他人:您实际上不再应该再使用此NLTK程序包,而是:nltk.parse.corenlp.CoreNLPParser