Pregunta

cómo generar las relaciones más generales, menos generales y equivalencia de wordnet?

wordnet similitud en RitaWordnet da un número como -1.0, 0,222 o 1,0 pero la forma de llegar a las más generales, las relaciones generales entre menos palabras? qué herramienta sería ideal para que? por favor me ayude

i obtener java.lang.NullPointerException, después de que se imprime "Los holonyms son"

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();
        }
     }
  }
¿Fue útil?

Solución

El wordnet Rita proporciona API para encontrar hiperónimos (más general), hipónimos (menos generales) y sinónimos. Compruebe la página siguiente para los detalles: -

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

para saber acerca de todas estas terminologías (hiperónimos etc.) echa un vistazo a la página de Wikipedia de WordNet.

Otros consejos

Puede intentar analizar las bases de datos usted mismo. No va a ser tan difícil. 1) Encontrar la palabra en el de los siguientes archivos: index.noun, index.verb, index.adj y index.noun, 2) extraer los identificadores de sus synsets ( "sentidos") y para cada synset ir a data.noun , data.verb, data.adj o data.noun y extraer el ID de synset de sus hiperónimos o hipónimos. A continuación, busque estos identificadores de synset para sinónimos y brillo. Es razonablemente fácil si utiliza expresiones regulares.

Las bases de datos (por ejemplo index.verb) se pueden encontrar en uno de los directorios de Wordnet, que se puede descargar de aquí . Si está utilizando Linux, también hay un buen programa de línea de comandos que hace el trabajo para usted, pero en caso de que quieran integrarse en código Java, me temo que tendrá que hacer todo el análisis de sí mismo. También puede encontrar interesante este enlace . Espero que esta ayuda:)

PS: También puede tratar NLTK (escrito en Python)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top