PDA

View Full Version : [Java] Usare Wordnet


Edde
16-12-2006, 22:03
Ciao :)

Ho usato le librerie jwnl 1.3 (l'ultima versione, a quanto mi risulta) per integrare wordnet (2.0) nella mia applicazione.

Il problema sorge a volte quando chiamo il metodo getDirectHypernyms della classe PointerUtils... in alcuni casi funziona tutto a meraviglia, in altri invece mi lancia un'eccezione java.lang.NullPointerException:


java.lang.NullPointerException
at net.didion.jwnl.data.PointerTarget.getPointers(PointerTarget.java:39)
at net.didion.jwnl.data.PointerTarget.getTargets(PointerTarget.java:53)
at net.didion.jwnl.data.SynsetProxy.getTargets(SynsetProxy.java:47)
at net.didion.jwnl.data.PointerUtils.getPointerTargets(PointerUtils.java:412)
at net.didion.jwnl.data.PointerUtils.getDirectHypernyms(PointerUtils.java:39)
at Supporto2.ipernomiDiretti(Esempio.java:92)
at Esempio.main(Esempio.java:229)

Si tratta di un'eccezione lanciata da una delle classi del pacchetto, e francamente non so più cosa fare... inizialmente pensavo che me la lanciasse quando non trovava un ipernome diretto, ma in realtà ogni termine, in wordnet, ha almeno un ipernome (perlomeno "entity", da cui derivano tutti), quindi la cosa non ha senso...

Non so, avrei pure una certa fretta (ho la consegna martedì), se qualcuno sa aiutarmi...

Grazie :)

lovaz
18-12-2006, 08:53
Magari fai vedere la riga incriminata:
Supporto2.ipernomiDiretti(Esempio.java:92)

Edde
18-12-2006, 10:27
Hai ragione :)

/*Stampa, per ogni significato, gli ipernomi diretti*/
public void ipernomiDiretti(String parola) throws JWNLException
{
IndexWord lemma = Dictionary.getInstance().getIndexWord(POS.NOUN, parola);
//mi ricavo l'albero degli iperonimi per ogni senso

PointerTargetNode ptn;
Synset sy;

for(int nn=1; nn<(lemma.getSenseCount()+1); nn++){

System.out.println("\n-------------------------");
System.out.println("Significato: "+lemma.getSense(nn).getGloss());

try{
PointerTargetNodeList hypernyms = PointerUtils.getInstance().getDirectHypernyms(lemma.getSense(nn));

Iterator iter = hypernyms.iterator();

while(iter.hasNext()){
ptn = (PointerTargetNode)iter.next();
sy = ptn.getSynset();
System.out.println(" * "+sy.getGloss());
System.out.println(" - Ipernomi diretti: "+Supporto.cutParola(sy.toString()));
System.out.println();

}
}catch(NullPointerException e)
{System.out.println("Nessun ipernome");}

}


}//Fine ipernomi diretti




Non faccio altro che chiamare il metodo di jwnl "getDirectHypernyms".
Non capisco perchè in alcuni casi vada ed in altri no.... :confused:

Edde
19-12-2006, 08:07
Tra l'altro ho trovato pure un file di esempio sul web, e fa esattamente come faccio io per ottenere gli ipernomi diretti... :confused:

Non credo di aver sbagliato qualche cosa, ma non capisco allora quale sia il problema.