为什么Java Wordnet相似性会在第二次调用时崩溃?

时间:2014-03-27 13:22:40

标签: java similarity wordnet

如上所述here我使用的是Wordnet :: similar的Java版本。

这是服务器端代码。我收到一个包含两个元素的列表(即两个句子) 然后计算这两个句子的相似度矩阵

String wordNetDirectory = System.getenv("WNHOME");
JWS ws = new JWS(wordNetDirectory,"3.0");
Resnik res = ws.getResnik();
while(true) {
    try {
        Socket clientSocket = serverSocket.accept();
        System.out.println("Socket Established...");

        ObjectOutputStream outToClient = new ObjectOutputStream(clientSocket.getOutputStream());
        ObjectInputStream inFromClient = new ObjectInputStream(clientSocket.getInputStream());

        List<List<String>> sents;
        sents = (List<List<String>>) inFromClient.readObject();
        System.out.println("recieved");

        List<String> s1 = sents.get(0);
        List<String> s2 = sents.get(1);

        Double sum = 0.0;
        for(String w1 : s1) {
            for(String w2 : s2) {
                if(w1.equals(w2)) sum += 1;
                else sum += res.max(w1, w2, "n"); // <- Server.java:54
            }
        }
        sum /= (s1.size() * s2.size());
        outToClient.writeObject(sum);
        System.out.println("wrote " + sum);
    } catch (IOException e) {
    } catch (ClassNotFoundException e) {
    }
}

客户端以串行方式查询服务器的句子相似性(即,在收到前一对的相似度得分后,它会发送另一个请求)

这是我在服务器端获得的输出

Socket Established...
recieved
wrote 0.111357828694864
Socket Established...

Exception in thread "main" java.lang.IllegalArgumentException
at edu.mit.jwi.item.IndexWordID.<init>(IndexWordID.java:62)
at edu.mit.jwi.CachingDictionary.getIndexWord(CachingDictionary.java:173)
at edu.sussex.nlp.jws.Resnik.res(Resnik.java:133)
at edu.sussex.nlp.jws.Resnik.max(Resnik.java:313)
at Server.start(Server.java:54)
at Main.main(Main.java:7)

我不明白为什么在第二次建立连接时崩溃的原因。

1 个答案:

答案 0 :(得分:1)

我认为这可能是由非法字引起的。如果w1w2为空或所有空格或未出现在wordnet单词列表中,则在获取wordID时会出现此异常。

你在IndexWordID类中得到了异常,所以我认为这是最可能的问题。您可以更改您尝试的字符串,或者在调用方法的地方提供代码和字符串参数以获取更多信息。您可以看到此文档http://projects.csail.mit.edu/jwi/api/edu/mit/jwi/item/IndexWordID.html