Stanford Parser-java.io.IOException:无法解析为类路径,文件名或URL

问题描述 投票:0回答:1

我无法使斯坦福解析器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问题,请告诉我我在做什么错?

java python nlp nltk stanford-nlp
1个回答
0
投票

我想您的代码不正确,并且在'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

© www.soinside.com 2019 - 2024. All rights reserved.