Я использую инструмент для языкового анализа под названием 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);
}
?>
Как я могу улучшить время отклика?
Попробуйте выполнить профилирование или, по крайней мере, напечатать разницу во времени в каждой важной строке, чтобы узнать, где находится узкое место.
Марио, вы правы в том, что он говорит о новой строке (\ n) в конце предложения. Я уже сделал это, и это продолжается медленно. Я также попытался отправить сообщения, а затем прочитать результат, но выполнение все еще очень медленное.






Когда вы запускаете программу, ей необходимо загрузить статистические модели для всех языков. Вот почему первое предложение занимает больше времени.
Программа "анализатор", поставляемая с 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, результат будет: Сервер не готов?
Если бы я попробовал с файлом конфигурации идентификации языка: 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 Всегда результат: Сервер не готов?
Эээ, вы правы, похоже, в анализаторе есть ошибка, из-за которой сервер не работает для lang identity.
Я только что исправил ошибку. Если вы загрузите файл src / main / sample_analyzer / main.cc с gitHub и перестроите freeling, у вас будет сервер, работающий на lang_ident. Вам повезло, я проверил ТАК на следующий день после того, как вы разместили это. Если вы разместите подобные вопросы на форуме FreeLing, я смогу ответить раньше.
Большое спасибо за Ваш ответ!!! Я попробую, что там написано. Примерно неделю назад попробуйте подписаться на форум фрилансеров. После заполнения формы мне пришло сообщение с ожиданием одобрения моего запроса. Я ничего не получил по электронной почте.
Сегодня я снова попытался подписаться на форум с тем же именем пользователя и адресом электронной почты, и это дает мне ошибку, которая уже использовалась. Затем я впервые получаю по почте: Спасибо за регистрацию на домашней странице FreeLing. Ваша заявка на создание учетной записи в настоящее время ожидает утверждения. Как только он будет одобрен, вы получите еще одно электронное письмо с информацией о том, как войти в систему, установить пароль и другие детали.
Я надеюсь, что придет еще одно письмо с одобрением. Я бы очень хотел иметь возможность писать любые вопросы прямо на форуме для фрилансеров.
Я только что одобрил вашу регистрацию. Вы должны получить письмо сейчас.
После загрузки файлов: main.cc и analyzer_client.cc и компиляции freeling работает отлично. Большое спасибо, Луис Падро !!
Разве вы не должны хотя бы посылать новую строку с каждым предложением? И читать языковой ответ сразу после каждого? (Вместо того, чтобы сначала посылать два предложения. Разве это не так, как это работает в командной строке?)