2014-10-21 2 views
0

Я написал код Java для выполнения Vowpal Wabbit следующим образом:Vowpal Wabbit выполнить без записи на диск

System.out.println("Executing command " + command); 
     final Runtime r = Runtime.getRuntime(); 
     final Process p = r.exec(command); 
     System.out.println("waiting for the process"); 
     try (final BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()))) { 
      String line; 

      while ((line = b.readLine()) != null) { 
       final T lineResult = textParser.parseLine(line); 
       parserResultCombiner.addToCombiner(lineResult); 
      } 
     } 
     p.waitFor(); 
     System.out.println("done"); 
} 

где команда

оч.сл. -d input.txt --loss_function = logistic -f model.vw

Недостатком этого является то, что он требует записи на диск. После некоторого поиска я узнал, что wowpal wabbit поддерживает чтение данных со стандартного ввода example in R

Я не мог найти никакого примера для этого в Java 1.8. Может ли кто-нибудь поделиться со мной?

+0

посмотреть [здесь] (http://stackoverflow.com/questions/10407308/redirec t-stdin-and-stdout-in-java), он показывает, как взаимодействовать с stdin и stdout внешней программы от Java. Этот пост также указывает на [этот вопрос] (http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream/3644288#3644288), также стоит прочитать. – fvu

+0

Поскольку ваш код уже читает из основного вывода внешнего процесса, не должно быть так сложно понять, как писать его на stdin. Просто используйте 'p.getOutputStream()' вместо 'p.getInputStream()' и напишите ему ... – Holger

ответ

3

Вам необходимо запустить vw в режиме демона. Это запускает процесс, который прослушивает указанный порт.

$ vw -i model.vw -t --daemon --quiet --port 26542 

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

$ echo " abc-example| a b c" | netcat localhost 26542 
0.000000 abc-example 

$ echo " xyz-example| x y z" | netcat localhost 26542 
1.000000 xyz-example 

Источник: https://github.com/JohnLangford/vowpal_wabbit/wiki/daemon-example

Недавно они выдвинули версию Java кода, который взаимодействует с VW используя jni https://github.com/JohnLangford/vowpal_wabbit/tree/master/java

Смежные вопросы