У меня есть проект, который использует этот пакет agentile / PHP-Стэнфорд-NLP (PHP-интерфейс к Stanford NLP Tools (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);
Это фрагмент кода, откуда происходит ошибка:
$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()));
Это ошибка:
Error: Could not find or load main class edu.stanford.nlp.parser.lexparser.LexicalizedParser
Редакция:
Это $cmd
вывод от localhost:
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
команда. Что означает, что ваш класс не в classpath
.
Класс edu.stanford.nlp.parser.lexparser.LexicalizedParser
должен быть внутри stanford-parser.jar
который вы вручную включаете в путь к классам.
В этом сценарии (поскольку вы сказали в комментариях, что файл действительно существует) есть две основные причины, которые могут вызвать проблему:
У вас нет разрешения на чтение для этого файла.
Ваш файл каким-то образом поврежден или не тот, который вы используете в своей локальной среде (он не содержит указанный класс).
Первая причина маловероятна, если вы загрузили файлы с тем же пользователем, с которым вы запускаете процесс, в любом случае это легко проверить и исправить.
Вторая причина может быть решена путем загрузки чистой версии и замены текущей. Вы можете скачать новую версию с Maven Central
и замените тот на вашем сервере, используя следующую команду:
wget http://central.maven.org/maven2/edu/stanford/nlp/stanford-parser/3.6.0/stanford-parser-3.6.0.jar && mv stanford-parser-3.6.0.jar /home/forge/mydomainname.com/public/stanford-parser.jar
Там может быть две проблемы
1) Пожалуйста, проверьте, если пути /home/forge/mydomainname.com/public/lib
/home/forge/mydomainname.com/public/
и соответствующие файлы JAR присутствуют.
2) Проверьте доступ ко всем этим файлам (доступ к этим файлам такой же, как у вашего MAMP?)?