PHP调用ClausIE JAR实现开放信息抽取(三元组提取)遇阻求助
解决PHP调用ClausIE JAR无输出的问题
1. 确认执行路径与权限
- 必须使用绝对路径调用Java程序和ClausIE的JAR文件,避免PHP运行环境找不到对应文件。同时确保PHP运行用户(如
www-data)拥有JAR文件的读取权限及Java程序的执行权限。// 示例:使用绝对路径调用 exec('/usr/bin/java -jar /var/www/html/clausie/example.jar "论坛用户发布了技术帖"', $output, $return_var);
2. 捕获完整输出(含错误信息)
exec默认仅捕获标准输出,错误信息会被丢弃。通过重定向错误流到标准输出,能直接看到执行失败的原因:
exec('/usr/bin/java -jar /path/to/example.jar "输入句子" 2>&1', $output, $return_var); print_r($output); // 查看所有输出(含错误) var_dump($return_var); // 非0值表示命令执行出错
3. 正确转义特殊参数
如果输入句子包含空格、引号等特殊字符,用escapeshellarg()处理参数,避免命令解析异常:
$sentence = "论坛里的用户分享了很多实用的编程技巧"; $safe_sentence = escapeshellarg($sentence); exec("/usr/bin/java -jar /path/to/example.jar $safe_sentence 2>&1", $output, $return_var);
4. 验证Java环境一致性
确保PHP运行环境的Java版本与你命令行使用的版本一致(ClausIE通常要求Java 8及以上),可通过以下代码验证:
exec('/usr/bin/java -version 2>&1', $java_info); print_r($java_info);
5. 调试命令拼接结果
把PHP拼接好的命令打印出来,复制到终端执行,排查是否是命令拼接错误导致的问题:
$sentence = "测试提取三元组"; $safe_sentence = escapeshellarg($sentence); $command = "/usr/bin/java -jar /path/to/example.jar $safe_sentence"; echo "待执行命令:$command"; // 复制此命令到终端测试 exec("$command 2>&1", $output, $return_var);
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

