| 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", "<s> the old man")); | |
| System.err.println(lm.wordLogProb("wants", "<s> the old man")); | |
| } catch (URISyntaxException e) { | |
| e.printStackTrace(); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| } | |