import java.io.DataInputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.URI; import java.net.URISyntaxException; public class LMClient { private Socket sock; private DataInputStream input; private OutputStreamWriter output; public LMClient(URI u) throws IOException { sock = new Socket(u.getHost(), u.getPort()); System.err.println(sock); input = new DataInputStream(sock.getInputStream()); output = new OutputStreamWriter(sock.getOutputStream(), "UTF8"); } public float wordLogProb(String word, String context) throws IOException { return wordLogProb(word, context.split("\\s+")); } public float wordLogProb(String word, String[] context) throws IOException { StringBuffer sb = new StringBuffer(); sb.append("prob "); sb.append(word); for (int i = context.length-1; i >= 0; --i) { sb.append(' ').append(context[i]); } sb.append("\r\n"); output.write(sb.toString()); output.flush(); byte b1 = input.readByte(); byte b2 = input.readByte(); byte b3 = input.readByte(); byte b4 = input.readByte(); Float f = Float.intBitsToFloat( (((b4 & 0xff) << 24) | ((b3 & 0xff) << 16) | ((b2 & 0xff) << 8) | (b1 & 0xff)) ); input.readByte(); input.readByte(); return f; } public static void main(String[] args) { try { LMClient lm = new LMClient(new URI("lm://csubmit02.umiacs.umd.edu:6666")); System.err.println(lm.wordLogProb("want", " the old man")); System.err.println(lm.wordLogProb("wants", " the old man")); } catch (URISyntaxException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }