WordNet - JWI API

WordNet是普林斯顿大学做的一个本体库,可以去http://wordnet.princeton.edu/这个网站上下载。Windows上的最新版本是2.1,好像好几年没有更新了。安装过程同一般软件。安装目录要记得,后面要用到,一般的安装目录是:C:\Program Files\WordNet\2.1。

 

然后下JWI,下载链接:http://www.mit.edu/~markaf/prj/jwi/,可以选最下面那个完整包下载,包括了manual,PDF文档里面有些例子讲解比较全面。最新版本:2.2.3,更新日期:Feb 25, 2012。

 

下载包里有个edu.mit.jwi_2.1.5_jdk的JAR包,然后在IDE里导入这个JAR包。在Eclipse里面创建一个新的Java Project,然后右键点击你的Project,在Build Path-->Configue Build Path...-->Java Build Path-->Libraries-->Add External Jars...选择刚才的edu.mit.jwi_2.1.5_jdk,这样你的Project里就包含了这个MIT的Library了。

 

然后把WordNet的安装路径添加到环境变量,这样是为了程序里面可以找到它。PDF里有如下说明:

“In this particular example, the base Wordnet directory is assumed to be stored in a system environment variable called WNHOME; this may be different on your system. Note that the WNHOME variable points to the root of the Wordnet installation directory and the dictionary data directory "dict" must be appended to this path.”

 

配完后直接贴上PDF里的SAMPLE程序就可以调试了。

 

 1 package com.wordnet;
 2 
 3 import java.io.*; 
 4 import java.net.*; 
 5 import edu.mit.jwi.Dictionary; 
 6 import edu.mit.jwi.IDictionary; 
 7 import edu.mit.jwi.item.*; 
 8 
 9 public class  HiWordnet {  
10   public static void main(String[] args) throws IOException  { 
11 
12     //通过环境变量,建立指向WordNet词典目录的URL。   
13     String wnhome = System.getenv("WNHOME");    
14     String path = wnhome + File.separator + "dict";   
15     URL url = new URL("file",  null, path);   
16 
17     //建立词典对象并打开它。   
18     IDictionary dict = new  Dictionary(url);    
19     dict.open(); 
20 
21     //查询money这个词的第一种意思,注意get函数的参数表示第#种意思。
22     //POS后面的参数表示要选哪种词性的含义   
23 
24     IIndexWord  idxWord = dict.getIndexWord("money", POS.NOUN);   
25     IWordID wordID =  (IWordID)idxWord.getWordIDs().get(0);   
26     IWord word =  dict.getWord(wordID);   
27     System.out.println("Id = " + wordID);    
28     System.out.println("Lemma = " + word.getLemma());   
29     System.out.println("Gloss  = " + word.getSynset().getGloss());     
30 
31     //第二种意思   
32     IWordID wordID2 =  (IWordID)idxWord.getWordIDs().get(1);   
33     IWord word2 =  dict.getWord(wordID2);    
34     System.out.println(word2.getSynset().getGloss());   
35 
36     //第三种意思   
37     IWordID  wordID3 = (IWordID)idxWord.getWordIDs().get(2);   
38     IWord word3 =  dict.getWord(wordID3);    
39     System.out.println(word3.getSynset().getGloss()); 
40   }
41 }

 

之后的工作就是看看如何比较两个概念的语义相似度了。

 

 

posted @ 2012-11-06 21:01  bluepoint2009  阅读(1610)  评论(0)    收藏  举报