repaired lemmatizer

This commit is contained in:
Rafał Jaworski 2018-12-31 00:50:24 +01:00
parent 3c575cd596
commit dea4308618
2 changed files with 33 additions and 9 deletions

View File

@ -1,6 +1,9 @@
#include "socket_lemmatizer.hpp"
#include <time.h>
#include "config.hpp"
#include <boost/lexical_cast.hpp>
SocketLemmatizer::SocketLemmatizer(int port) throw(ConcordiaException) :
@ -79,20 +82,38 @@ bool SocketLemmatizer::_send_data(std::string data)
std::string SocketLemmatizer::_receive(int size=512)
{
char buffer[size];
std::string reply;
std::string reply = "";
//Receive a reply from the server
if(recv(_sock , buffer , sizeof(buffer) , 0) < 0) {
throw ConcordiaException("Receive failed");
bool dataAvailable = true;
while (dataAvailable) {
int amountReceived = recv(_sock , buffer , sizeof(buffer) , 0);
if (amountReceived < 0) {
throw ConcordiaException("Lemmatizer: recv failed");
} else if (amountReceived == 0) {
dataAvailable = false;
} else {
buffer[amountReceived] = '\0';
reply += buffer;
}
}
reply = buffer;
return reply;
}
std::string SocketLemmatizer::lemmatizeSentence(std::string languageCode, std::string sentence) {
for (int i=0;i<5;i++) {
try {
_connect();
_send_data(languageCode+sentence+LEMMATIZER_DELIMITER);
std::string reply = _receive(512);
_disconnect();
return reply.substr(0,reply.find(LEMMATIZER_DELIMITER));
} catch (std::exception & e) {
_logger.logString("Problem with lemmatization of the sentence", sentence);
_logger.log("Waiting 2 seconds and retrying...");
sleep(2);
}
}
throw ConcordiaException("Can not lemmatize sentence: "+sentence);
}

View File

@ -9,6 +9,7 @@
#include <concordia/concordia_exception.hpp>
#include "logger.hpp"
class SocketLemmatizer {
public:
@ -34,6 +35,8 @@ private:
int _sock;
struct sockaddr_in _server;
Logger _logger;
};
#endif