gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:22 25 4
gpt4 key购买 nike

我有一个项目正在使用这个包 agentile/PHP-Stanford-NLP (Stanford NLP 工具(POS Tagger、NER、Parser)的 PHP 接口(interface)调用了一些 .jar 文件。在本地主机(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);

这是错误来源的代码段:

$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)不在 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

关于java - 从 PHP 调用 .jar 文件 - Stanford NLP - 无法找到或加载主 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com