Question

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

WordNet similitude RitaWordnet donne un certain nombre comme -1,0, 0,222 ou 1.0, mais comment arriver au plus général, les relations entre les mots moins généraux? 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();
        }
     }
  }
Était-ce utile?

La solution

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

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

pour savoir sur tous ces terminologies (hyperonymes etc) consultez la page wikipedia de WordNet.

Autres conseils

Vous pouvez essayer l'analyse des bases de données vous. Il ne sera pas difficile. 1) Trouvez le mot sur des fichiers suivants: index.noun, index.verb, index.adj et index.noun, 2) extraire les ids de ses synsets ( « sens ») et pour chaque synset aller à data.noun , data.verb, data.adj ou data.noun et extraire l'ID de synset de ses hyperonymes ou hyponymes. Ensuite, la recherche de ces ids synset pour synonymes et brillant. Il est relativement facile si vous utilisez des expressions régulières.

Les bases de données (par exemple index.verb) se trouvent dans l'un des répertoires de Wordnet, que vous pouvez télécharger à partir de ici . Si vous utilisez Linux, il y a aussi un beau programme en ligne de commande qui fait le travail pour vous, mais si vous souhaitez intégrer dans le code Java, je crains que vous aurez à faire tout vous-même l'analyse syntaxique. Vous pouvez également trouver intéressant ce lien. Espérons que cela aide:)

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top