Выполнить команду linux через PHP

Я использую инструмент для языкового анализа под названием Freeling. Для определения языка я использую команду analyzer в консоли Linux:

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);

}
?>

Как я могу улучшить время отклика?

Разве вы не должны хотя бы посылать новую строку с каждым предложением? И читать языковой ответ сразу после каждого? (Вместо того, чтобы сначала посылать два предложения. Разве это не так, как это работает в командной строке?)

mario 12.06.2018 01:09

Попробуйте выполнить профилирование или, по крайней мере, напечатать разницу во времени в каждой важной строке, чтобы узнать, где находится узкое место.

Luis Muñoz 12.06.2018 03:40

Марио, вы правы в том, что он говорит о новой строке (\ n) в конце предложения. Я уже сделал это, и это продолжается медленно. Я также попытался отправить сообщения, а затем прочитать результат, но выполнение все еще очень медленное.

Goar 12.06.2018 21:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы запускаете программу, ей необходимо загрузить статистические модели для всех языков. Вот почему первое предложение занимает больше времени.

Программа "анализатор", поставляемая с FreeLing, - это всего лишь демонстрация. Лучший способ использовать библиотеку - написать свою собственную программу, как показано в учебнике FreLing https://talp-upc.gitbooks.io/freeling-tutorial/content/.

Если вы хотите вызвать FreeLing из PHP, API не существует, поэтому вам, вероятно, следует прибегнуть к «режиму сервера», когда freeling загружается один раз, а затем принимает запросы.

Более подробную информацию вы найдете в руководстве пользователя FreeLing https://talp-upc.gitbooks.io/freeling-4-1-user-manual/content/.

Первым делом я попробовал выполнить идентификацию языка в серверном режиме. Я пробовал использовать конфигурационный файл анализатора испанского языка -f /usr/share/freeling/config/es.cfg --outlv identify --fidn /usr/share/freeling/common/lang_ident/ident.dat --server - -port 12345, когда я запрашиваю сервер с помощью: analyzer_client 12345 <texto.txt, результат будет: Сервер не готов?

Goar 13.06.2018 12:31

Если бы я попробовал с файлом конфигурации идентификации языка: analyzer -f /usr/share/freeling/config/ident.cfg --outlv identify --fidn /usr/share/freeling/common/lang_ident/ident.dat --server - -port 12345 analyzer_client 12345 <texto.txt Всегда результат: Сервер не готов?

Goar 13.06.2018 12:32

Эээ, вы правы, похоже, в анализаторе есть ошибка, из-за которой сервер не работает для lang identity.

Lluís Padró 13.06.2018 17:01

Я только что исправил ошибку. Если вы загрузите файл src / main / sample_analyzer / main.cc с gitHub и перестроите freeling, у вас будет сервер, работающий на lang_ident. Вам повезло, я проверил ТАК на следующий день после того, как вы разместили это. Если вы разместите подобные вопросы на форуме FreeLing, я смогу ответить раньше.

Lluís Padró 13.06.2018 18:59

Большое спасибо за Ваш ответ!!! Я попробую, что там написано. Примерно неделю назад попробуйте подписаться на форум фрилансеров. После заполнения формы мне пришло сообщение с ожиданием одобрения моего запроса. Я ничего не получил по электронной почте.

Goar 15.06.2018 02:49

Сегодня я снова попытался подписаться на форум с тем же именем пользователя и адресом электронной почты, и это дает мне ошибку, которая уже использовалась. Затем я впервые получаю по почте: Спасибо за регистрацию на домашней странице FreeLing. Ваша заявка на создание учетной записи в настоящее время ожидает утверждения. Как только он будет одобрен, вы получите еще одно электронное письмо с информацией о том, как войти в систему, установить пароль и другие детали.

Goar 15.06.2018 02:49

Я надеюсь, что придет еще одно письмо с одобрением. Я бы очень хотел иметь возможность писать любые вопросы прямо на форуме для фрилансеров.

Goar 15.06.2018 02:49

Я только что одобрил вашу регистрацию. Вы должны получить письмо сейчас.

Lluís Padró 15.06.2018 09:16

После загрузки файлов: main.cc и analyzer_client.cc и компиляции freeling работает отлично. Большое спасибо, Луис Падро !!

Goar 15.06.2018 23:43

Другие вопросы по теме