Wordnet Similarity in Java: JAWS, JWNL or Java WN::Similarity?

前端 未结 3 890
甜味超标
甜味超标 2020-12-05 17:05

I need to use Wordnet in a java-based app. I want to:

  • search synsets

  • find similarity/relatedness between synsets

My app u

3条回答
  •  难免孤独
    2020-12-05 17:38

    I use JAWS for normal wordnet stuff because it's easy to use. For similarity metrics, though, I use the library located here. You'll also need to download this folder, containing pre-processed WordNet and corpus data, for it to work. The code can be used like this, assuming you placed that folder in another called "lib" in your project folder:

    JWS ws = new JWS("./lib", "3.0");
    Resnik res = ws.getResnik();
    TreeMap scores1 = res.res(word1, word2, partOfSpeech);
    for(Entry e: scores1.entrySet())
        System.out.println(e.getKey() + "\t" + e.getValue());
    System.out.println("\nhighest score\t=\t" + res.max(word1, word2, partOfSpeech) + "\n\n\n");
    

    This will print something like the following, showing the similarity score between each possible combination of synsets represented by the words to be compared:

    hobby#n#1,gardening#n#1 2.6043996588901104
    hobby#n#2,gardening#n#1 -0.0
    hobby#n#3,gardening#n#1 -0.0
    highest score   =   2.6043996588901104
    

    There are also methods that allow you to specify which sense of either/both words: res(String word1, int senseNum1, String word2, partOfSpeech), etc. Unfortunately, the source documentation is not JavaDoc, so you'll need to inspect it manually. The source can be downloaded here.

    The available algorithms are:

    JWSRandom(ws.getDictionary(), true, 16.0);//random number for baseline
    Resnik res = ws.getResnik();
    LeacockAndChodorowlch = ws.getLeacockAndChodorow();
    AdaptedLesk adLesk = ws.getAdaptedLesk();
    AdaptedLeskTanimoto alt = ws.getAdaptedLeskTanimoto();
    AdaptedLeskTanimotoNoHyponyms altnh = ws.getAdaptedLeskTanimotoNoHyponyms();
    HirstAndStOnge hso = ws.getHirstAndStOnge();
    JiangAndConrath jcn = ws.getJiangAndConrath();
    Lin lin = ws.getLin();
    WuAndPalmer wup = ws.getWuAndPalmer();
    

    Also, it requires you to have the jar file for MIT's JWI

提交回复
热议问题