Error: Could not find or load main class edu.stanford.nlp.parser.lexparser.LexicalizedParser

我有一个项目正在使用此包agentile/PHP-Stanford-NLP(斯坦福NLP工具的PHP接口(interface)(POS Tagger,NER,Parser)调用了几个.jar文件。在localhost(MAMP)上一切正常,但是当我将其部署到我在服务器上安装了JRE/JDK,Oracle JDK,Oracle JDK 8。

这是我用来调用Java文件的代码:

$parser = new \StanfordNLP\Parser(

public_path().'/stanford-parser.jar',

public_path().'/stanford-parser-3.4.1-models.jar'

);

$parser = $parser->parseSentence($text);

这是错误来自的代码片段:

$parser = $this->lexicalized_parser ? 'edu/stanford/nlp/models/lexparser/englishFactored.ser.gz' : 'edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz';

$osSeparator = $this->php_os == 'windows' ? ';' : ':';

$cmd = $this->getJavaPath()

. " $options -cp \""

. $this->getJar()

. $osSeparator

. $this->getModelsJar()

. '" edu.stanford.nlp.parser.lexparser.LexicalizedParser -encoding UTF-8 -outputFormat "'

. $this->getOutputFormat()

. "\" "

. $parser

. " "

. $tmpfname;

$process = proc_open($cmd, $descriptorspec, $pipes, dirname($this->getJar()));

https://github.com/agentile/PHP-Stanford-NLP/blob/51f99f1aaa1c3d5822fe634346b2b4b33a7a6223/src/StanfordNLP/Parser.php#L90

这是错误:

Error: Could not find or load main class edu.stanford.nlp.parser.lexparser.LexicalizedParser

编辑:

这是本地主机的$cmd输出:

java -mx300m -classpath */Applications/MAMP/htdocs/mydomainname/public/lib/slf4j-api.jar:/Applications/MAMP/htdocs/mydomainname/public/lib/slf4j-simple.jar:/Applications/MAMP/htdocs/mydomainname/public/stanford-parser.jar:/Applications/MAMP/htdocs/mydomainname/public/stanford-parser-3.4.1-models.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser -encoding UTF-8 -outputFormat wordsAndTags,penn,typedDependencies edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz /private/tmp/phpnlpparserC7ptSf

这是生产中的$cmd输出:

java -mx300m -classpath */home/forge/mydomainname.com/public/lib/slf4j-api.jar:/home/forge/mydomainname.com/public/lib/slf4j-simple.jar:/home/forge/mydomainname.com/public/stanford-parser.jar:/home/forge/mydomainname.com/public/stanford-parser-3.4.1-models.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser -encoding UTF-8 -outputFormat wordsAndTags,penn,typedDependencies edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz /tmp/phpnlpparserRdsoE5

最佳答案

您发布的错误消息:

Error: Could not find or load main class edu.stanford.nlp.parser.lexparser.LexicalizedParser

表示可以通过java命令找到您的类(class)。这意味着您的类(class)不在 classpath 中。

edu.stanford.nlp.parser.lexparser.LexicalizedParser应该在stanford-parser.jar内部,您要手动将其包括在类路径中。

在这种情况下(因为您在评论中说该文件确实存在),可能导致此问题的主要原因有两个:

  • 您没有此文件的读取权限。
  • 您的文件已损坏或与您在本地环境中使用的文件不同(它不包含所引用的类)。

如果您使用与运行进程相同的用户上载文件,则第一个原因不太可能,无论如何,这很容易检查和修复。

第二个原因可以通过下载一个干净的版本并替换当前版本来解决。您可以从 Maven Central 下载新版本,并使用以下命令替换服务器中的新版本:

wget http://central.maven.org/maven2/edu/stanford/nlp/stanford-pa‌​rser/3.6.0/stanford-‌​parser-3.6.0.jar && mv stanford-parser-3.6.0.jar /home/forge/mydomainname.com/public/stanford-parser.jar

以上是 Error: Could not find or load main class edu.stanford.nlp.parser.lexparser.LexicalizedParser 的全部内容, 来源链接: www.h5w3.com/122473.html

回到顶部