tags:

views:

36

answers:

2

how to generate the more general, less general and equivalence relations from wordnet?

wordnet similarity in RitaWordnet gives a number like -1.0, 0.222 or 1.0 but how to arrive at the more general, less general relations between words? which tool would be ideal for that? please help me

i get java.lang.NullPointerException, after it prints "the holonyms are"

package wordnet;

import rita.wordnet.RiWordnet;

public class Main {

public static void main(String[] args) {


              try {
            // Would pass in a PApplet normally, but we don't need to here
        RiWordnet wordnet = new RiWordnet();
        wordnet.setWordnetHome("/usr/share/wordnet/dict");
            // Demo finding parts of speech
            String word = "first name";
            System.out.println("\nFinding parts of speech for " + word + ".");
            String[] partsofspeech = wordnet.getPos(word);
            for (int i = 0; i < partsofspeech.length; i++) {
                System.out.println(partsofspeech[i]);
            }

            //word = "eat";
            String pos = wordnet.getBestPos(word);
            System.out.println("\n\nDefinitions for " + word + ":");
            // Get an array of glosses for a word
            String[] glosses = wordnet.getAllGlosses(word, pos);
            // Display all definitions
            for (int i = 0; i < glosses.length; i++) {
                System.out.println(glosses[i]);
            }

            // Demo finding a list of related words (synonyms)
            //word = "first name";
            String[] poss = wordnet.getPos(word);
            for (int j = 0; j < poss.length; j++) {
                System.out.println("\n\nSynonyms for " + word + " (pos: " + poss[j] + ")");
                String[] synonyms = wordnet.getAllSynonyms(word, poss[j], 10);
                for (int i = 0; i < synonyms.length; i++) {
                    System.out.println(synonyms[i]);
                }
            }

            // Demo finding a list of related words
            // X is Hypernym of Y if every Y is of type X
            // Hyponym is the inverse
            //word = "nurse";
            pos = wordnet.getBestPos(word);
            System.out.println("\n\nHyponyms for " + word + ":");
            String[] hyponyms = wordnet.getAllHyponyms(word, pos);
            //System.out.println(hyponyms.length);
            //if(hyponyms!=null)
            for (int i = 0; i < hyponyms.length; i++) {


                System.out.println(hyponyms[i]);
            }

            System.out.println("\n\nHypernyms for " + word + ":");
            String[] hypernyms = wordnet.getAllHypernyms(word, pos);
            //if(hypernyms!=null)
            for (int i = 0; i < hypernyms.length; i++) {
                System.out.println(hypernyms[i]);
            }

               System.out.println("\n\nHolonyms for " + word + ":");

            String[] holonyms = wordnet.getAllHolonyms(word, pos);
            //if(holonyms!=null)
            for (int i = 0; i < holonyms.length; i++) {
                System.out.println(holonyms[i]);
            }

              System.out.println("\n\nmeronyms for " + word + ":");
            String[] meronyms = wordnet.getAllMeronyms(word, pos);
            if(meronyms!=null)
            for (int i = 0; i < meronyms.length; i++) {
                System.out.println(meronyms[i]);
            }
              System.out.println("\n\nAntonym for " + word + ":");
            String[] antonyms = wordnet.getAllAntonyms(word, pos);
            if(antonyms!=null)
            for (int i = 0; i < antonyms.length; i++) {
                System.out.println(antonyms[i]);
            }


            String start = "cameras";
            String end = "digital cameras";
            pos = wordnet.getBestPos(start);

            // Wordnet can find relationships between words
            System.out.println("\n\nRelationship between: " + start + " and " + end);
            float dist = wordnet.getDistance(start, end, pos);
            String[] parents = wordnet.getCommonParents(start, end, pos);
            System.out.println(start + " and " + end + " are related by a distance of: " + dist);

            // These words have common parents (hyponyms in this case)
            System.out.println("Common parents: ");
            if (parents != null) {
                for (int i = 0; i < parents.length; i++) {
                    System.out.println(parents[i]);
                }
            }

//wordnet. // System.out.println("\n\nHypernym Tree for " + start); // int[] ids = wordnet.getSenseIds(start,wordnet.NOUN); // wordnet.printHypernymTree(ids[0]); } catch (Exception e) { e.printStackTrace(); } }

}

A: 

The Rita wordnet does provide api for finding hypernyms(more general),hyponyms(less general) and synonyms. Check the following page for the details :-

http://www.rednoise.org/rita/wordnet/documentation/index.htm

for knowing about all these terminologies(hypernyms etc) check out the wikipedia page of wordnet.

deovrat singh
yes.. but it throws exception most of the times..
karthi
A: 

You can try parsing the databases yourself. It won't be that hard. 1) Find the word in on of the following files: index.noun, index.verb, index.adj and index.noun, 2) extract the ids of its synsets ("senses") and for each synset go to data.noun, data.verb, data.adj or data.noun and extract the synset id of its hypernyms or hyponyms. Then search these synset ids for synonyms and gloss. It's reasonably easy if you use regular expressions.

The databases (e.g. index.verb) can be found in one of the directories of Wordnet, which you can download from here. If you are using Linux, there is also a nice command-line programme that does the job for you, but in case you want to integrate it in Java code, I'm afraid you'll have to do all the parsing yourself. You might also find this link interesting. Hope this helps:)

PS: You can also try NLTK (written in Python)

Thea