Stanford CoreNLP Server - как получить доступ к результатам из Java - PullRequest
0 голосов
/ 06 мая 2018

Я создал сервер CoreNLP и могу получить к нему доступ с помощью команды wget:

 wget --post-data 'It is a nice day, isn't it?' 'http://192.168.1.30:9000/?properties={"annotators": "openie", "outputFormat": "json"}' -O res.txt

Wget сохраняет результаты в файл res.txt.

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

Мой код:

class JSON {
static String encode(HashMap<String, String> hm) {
    StringBuilder sb = new StringBuilder("?");
    try {
        for (Map.Entry<String, String> entry : hm.entrySet()) {
            String par = URLEncoder.encode(entry.getKey(), "utf-8");
            String val = URLEncoder.encode(entry.getValue(), "utf-8");
            String link = par + "=" + val;
            sb.append(link + "&");
        }
    } catch (Exception e) { e.printStackTrace(); }
    return sb.toString();
}

static String POST(String s_url, HashMap<String, String> params) {
    StringBuilder sb = new StringBuilder();
    String s_url_params = encode(params).replaceFirst("\\?", "");
    try {
        URL url = new URL(s_url);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        //Request header
        connection.setRequestMethod("POST");
        connection.setRequestProperty("User-Agent", "Mozilla/5.0");

        //Send post request
        connection.setDoOutput(true);
        DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
        dos.writeBytes(s_url_params);
        dos.flush(); dos.close();

        Log.i("JSONGet", "Sending 'POST' request to '" + s_url+"'");

        //Response - input
        BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream()));

        String line;
        while ((line=bf.readLine())!=null) {
            sb.append(line);
        }
        bf.close();
        Log.i("JSONGet", "Done.");

    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}
@Test
public void useAppContext() throws Exception {
    // Context of the app under test.
    Context appContext = InstrumentationRegistry.getTargetContext();

    HashMap<String, String> params = new HashMap<>();
    params.put("data", "It is a nice day, isn't it?");
    String json = JSON.POST("http://192.168.1.30:9000/?properties={\"annotators\": \"openie\", \"outputFormat\": \"json\"}", params);

    Log.e("Results", "Res: "+json);
}

Так что спасибо заранее!

1 Ответ

0 голосов
/ 07 мая 2018

В Stanford CoreNLP имеется код Java для создания клиента.

См. Полную страницу документации здесь:

https://stanfordnlp.github.io/CoreNLP/corenlp-server.html

Вы специально хотите прочитать раздел под названием «Клиент Java»

// creates a StanfordCoreNLP object with POS tagging, lemmatization, NER, parsing, and coreference resolution
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLPClient pipeline = new StanfordCoreNLPClient(props, "http://localhost", 9000, 2);
// read some text in the text variable
String text = ... // Add your text here!
// create an empty Annotation just with the given text
Annotation document = new Annotation(text);
// run all Annotators on this text
pipeline.annotate(document);
...