【问题标题】:Execute linux command through PHP通过PHP执行linux命令
【发布时间】:2018-11-21 06:04:46
【问题描述】:

我正在使用名为 Freeling 的语言分析工具。对于语言识别,我在 Linux 控制台中使用analyzer 命令:

analyzer -f /usr/share/freeling/config/ident.cfg --outlv ident --fidn /usr/share/freeling/common/lang_ident/ident.dat

当我执行此命令时,它会等待文本条目(句子)并确定它们使用的语言。 当我用西班牙语写一行文本时:“la casa es azul”并按回车键返回 ES,这意味着它是用西班牙语写的。如果我写“房子是蓝色的”,它会返回 EN,表示英语。要中断其执行,请按 Ctrl + C

当我在 Linux 控制台中执行此命令时,第一句需要一些时间来响应,而其他时间响应很快。

我使用这段代码来执行这个 php 命令,但是返回结果需要很多秒:

<?php
$cmd = "analyzer -f /usr/share/freeling/config/ident.cfg --outlv ident --fidn /usr/share/freeling/common/lang_ident/ident.dat";

$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("pipe", "w"),
);

$process = proc_open($cmd, $descriptorspec, $pipes);

$oracion[0]="we are the word";
$oracion[1]="somos el mundo";

if (is_resource($process)) {

    fwrite($pipes[0], $oracion[0]);
    fwrite($pipes[0], $oracion[1]);
    fclose($pipes[0]);

    while($pdf_content = fgets($pipes[1]))
    {
    echo $pdf_content . "<br>";
    }
    fclose($pipes[1]);
    $return_value = proc_close($process);

}
?>

如何提高响应时间?

【问题讨论】:

  • 你不应该在每个句子中至少发送一个换行符吗?并在每个之后立即阅读语言响应? (而不是先发送两个句子。在命令行上不就是这样吗?)
  • 尝试分析执行或至少在每个重要行上打印时间差,以了解瓶颈在哪里。
  • 马里奥,你在他所说的句子末尾的换行符 (\n) 上是对的。我已经这样做了,而且它继续缓慢。我也尝试发送句子然后读取结果,执行仍然很慢。

标签: php shell command


【解决方案1】:

当您运行程序时,它需要加载所有语言的统计模型。这就是为什么第一句话需要更长的时间。

FreeLing 提供的“分析器”程序只是一个演示。使用该库的最佳方法是编写自己的程序,如FreLing教程https://talp-upc.gitbooks.io/freeling-tutorial/content/

如果你想从 PHP 调用 FreeLing,没有 API,所以你应该使用“服务器模式”,freeling 加载一次,然后它会接受请求。

您可以在 FreeLing 用户手册https://talp-upc.gitbooks.io/freeling-4-1-user-manual/content/中找到更多信息

【讨论】:

  • 我尝试的第一件事是在服务器模式下执行语言识别。我尝试使用西班牙语分析器的配置文件 -f /usr/share/freeling/config/es.cfg --outlv ident --fidn /usr/share/freeling/common/lang_ident/ident.dat --server - -port 12345 当我查询服务器时:analyzer_client 12345
  • 如果我尝试使用语言识别配置文件:analyzer -f /usr/share/freeling/config/ident.cfg --outlv ident --fidn /usr/share/freeling/common/lang_ident /ident.dat --server --port 12345 analyzer_client 12345
  • 嗯,你是对的,分析器中似乎有一个错误导致服务器不适用于 lang ident。
  • 我刚刚修复了这个错误。如果您从 gitHub 下载文件 src/main/sample_analyzer/main.cc 并重新构建 freeling,您将拥有一个为 lang_ident 工作的服务器。你很幸运,我在你发布后的第二天就检查了。如果您在 FreeLing 论坛中发布此类问题,我将能够尽快回答。
  • 非常感谢您的回复!!!我会试试它说的。大约一周前,尝试订阅 freeling 论坛。填写表格后,我收到了等待批准我的请求的消息。我的电子邮件中没有收到任何内容。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 2015-04-08
  • 1970-01-01
相关资源
最近更新 更多