다양한 스탠포드 NLP 응용 프로그램에 연결하는 Perl 스크립트를 작성하려면 어떻게해야합니까?다양한 스탠포드 nlp 응용 프로그램에 연결하는 펄 스크립트를 작성하려면 어떻게해야합니까?
스탠포드 품사 및 명명 된 엔티티 응용 프로그램을 모두 서버로 호출했으며 명령 줄에서 요청을 보내면 원하는 응답이 표시됩니다. 여기에 예제 명령 행 호출은 다음과 같습니다
cat file.txt | nc localhost 8081
지금 펄 기반 명령 줄 스크립트뿐만 아니라 같은 일을 할 수있는 펄 기반의 CGI 스크립트를 모두 쓰고 싶지만 얻는 데 문제입니다
전체 응답을 되 돌리십시오. 여기 내 스크립트 (들)에서 가장 두드러진 라인은 다음과 같습니다
# initialize
my $text = '';
my $response = '';
# get the text to process and normalize it for xml
$text = &slurp($file);
$text =~ s/\&/\&/g;
$text =~ s/</\</g;
$text =~ s/>/\>/g;
$text =~ s/\W+/ /g;
# open a connection, send the data, and get the response
my $socket = new IO::Socket::INET(PeerHost => HOST, PeerPort => PORT, Proto => PROTOCOL);
if (! $socket) { die "Cannot connect to the server $!\n" }
$socket->send("$text\n");
$socket->recv($response, 10240000);
$socket->close();
이 작은 파일에 대한 잘 작동하지만 종종 상관없이 내가 버퍼 (10240000)를 증가하는 것 얼마나 큰, 더 큰 파일을하지하지 않습니다. 또한 서버에 의해 반환되는 데이터 양 (또는 클라이언트에 의해 더 구체적으로 수신 됨)은 절대로 같은 크기가 아닙니다. 때때로 응답은 다른 시간보다 크거나 작습니다.
언제 수신을 중단해야하는지 알 수 있습니까?
내가 뭘 잘못하고 있니?
평범하지 않은 양의 데이터를 다루는 경우 더욱 강력하게 구현해야합니다. 대부분의 TCP 소켓은 쓰기 버퍼 제한을 가지고 있으며이를 날려 버리면 오류 상태에서 데이터가 무시되거나 프로그램이 중단 될 위험이 있습니다. 일반적으로 ['select'] (http://perldoc.perl.org/functions/select.html)를 사용하여 소켓에 쓸 수 있는지 테스트 할 수있을뿐만 아니라 읽을 수있는 데이터가 있는지 테스트 할 수 있습니다. 이것은 당신이 보내기 및/또는 읽기를 완료 할 때까지 반복적으로 투표를하는 루프 안에 있습니다. – tadman
흥미 롭습니다! 서버가 요청 전체를 수신하고 있다고 확신하기 때문에 어떻게 "반복적으로 폴링"할 수 있습니까? – ericleasemorgan
그것이 바로'선택 '입니다. 그것은 읽을 데이터 또는 버퍼 공간을 기록 할 때 알려줍니다. 루프 안에 넣으면 반쯤 있습니다. – tadman