从PHP调用.jar文件 - Stanford NLP - 无法找到或加载主java类

Die*_*dal 11 php java classpath stanford-nlp laravel

我有一个项目正在使用这个包agentile/PHP-Stanford-NLP(PHP接口到斯坦福NLP工具(POS Tagger,NER,Parser)调用几个.jar文件.一切都在localhost(MAMP)上工作正常但是当我将它部署到laravel forge时它不再工作了.我在服务器中安装了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);
Run Code Online (Sandbox Code Playgroud)

这是错误来自的代码段:

$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()));
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

编辑:

这是$cmdlocalhost 的输出:

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
Run Code Online (Sandbox Code Playgroud)

这是$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
Run Code Online (Sandbox Code Playgroud)

acm*_*acm 2

您发布的错误消息:

\n\n
Error: Could not find or load main class edu.stanford.nlp.parser.lexparser.LexicalizedParser\n
Run Code Online (Sandbox Code Playgroud)\n\n

表明该java命令可以找到您的类。这意味着您的班级不在classpath.

\n\n

该类edu.stanford.nlp.parser.lexparser.LexicalizedParser应该位于stanford-parser.jar您手动包含在类路径中的类中。

\n\n

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

\n\n
    \n
  • 您没有此文件的读取权限。

  • \n
  • 您的文件以某种方式损坏,或者它与您在本地环境中使用的文件不同(它不包含引用的类)。

  • \n
\n\n

如果您使用运行进程的同一用户上传文件,则第一个原因不太可能,在任何情况下都很容易检查和修复。

\n\n

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

\n\n
wget http://central.maven.org/maven2/edu/stanford/nlp/stanford-pa\xe2\x80\x8c\xe2\x80\x8brser/3.6.0/stanford-\xe2\x80\x8c\xe2\x80\x8bparser-3.6.0.jar && mv stanford-parser-3.6.0.jar /home/forge/mydomainname.com/public/stanford-parser.jar\n
Run Code Online (Sandbox Code Playgroud)\n