2010-10-20 22 views
1

comment générer les relations plus générales, moins générales et d'équivalence à partir de wordnet?relations wordnet

La similarité de wordnet dans RitaWordnet donne un nombre comme -1.0, 0.222 ou 1.0 mais comment arriver aux relations plus générales et moins générales entre les mots? quel outil serait idéal pour cela? s'il vous plaît aidez-moi

je reçois java.lang.NullPointerException, après imprime "les holonyms sont"

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(); 
     } 
    } 
    } 
+1

Vous pouvez essayer le JWI (le MIT Java Wordnet Interface). Il est facile à utiliser, afin d'obtenir les holonomys ou les hypernymes dont vous avez juste besoin pour l'itérer à l'aide d'un itérateur !! http://projects.csail.mit.edu/jwi/ –

Répondre

2

La Rita WordNet fournit api pour trouver hyperonymes (plus générale), hyponymes (moins générale) et les synonymes. Consultez la page suivante pour les détails: -

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

pour connaître de toutes ces terminologies (hyperonymes etc) consultez la page wikipedia de WordNet.

+1

oui .. mais il jette l'exception la plupart du temps .. – karthi

0

Vous pouvez essayer d'analyser les bases de données vous-même. Ce ne sera pas si difficile. 1) Trouver le mot sur les fichiers suivants: index.noun, index.verb, index.adj et index.noun, 2) extraire les identifiants de ses synsets ("senses") et pour chaque synset aller à data.noun , data.verb, data.adj ou data.noun et extrait l'identifiant synset de ses hypernymes ou hyponymes. Ensuite, recherchez ces synset ids pour les synonymes et gloss. C'est relativement facile si vous utilisez des expressions régulières.

Les bases de données (par exemple, index.verb) peuvent être trouvées dans l'un des répertoires de Wordnet, que vous pouvez télécharger depuis here. Si vous utilisez Linux, il existe également un programme de ligne de commande qui fait le travail pour vous, mais au cas où vous voudriez l'intégrer dans du code Java, je crains que vous n'ayez à faire tout l'analyse vous-même. Vous pourriez également trouver this link intéressant. Espérons que cela aide :)

PS: Vous pouvez également essayer NLTK (écrit en Python)