我需要在基于java的应用程序中使用Wordnet。 我想:
搜索同义词
查找synsets之间的相似性/相关性
我的应用程序使用RDF图表,我知道有Wordnet的SPARQL端点,但我想最好有一个数据集的本地副本,因为它不是太大。
我找到了以下罐子:
您对我的应用推荐什么?
是否可以通过某些绑定从Java应用程序中使用Perl库?
谢谢! Mulone
答案 0 :(得分:12)
我使用JAWS作为普通的wordnet内容,因为它易于使用。但是,对于相似性指标,我使用位于here的库。您还需要下载包含预处理的WordNet和语料库数据的this文件夹,以使其正常工作。假设您将该文件夹放在项目文件夹中名为“lib”的另一个文件夹中,可以像这样使用代码:
JWS ws = new JWS("./lib", "3.0");
Resnik res = ws.getResnik();
TreeMap<String, Double> scores1 = res.res(word1, word2, partOfSpeech);
for(Entry<String, Double> e: scores1.entrySet())
System.out.println(e.getKey() + "\t" + e.getValue());
System.out.println("\nhighest score\t=\t" + res.max(word1, word2, partOfSpeech) + "\n\n\n");
这将打印如下内容,显示由要比较的单词表示的每个可能的同义词组合之间的相似性得分:
hobby#n#1,gardening#n#1 2.6043996588901104
hobby#n#2,gardening#n#1 -0.0
hobby#n#3,gardening#n#1 -0.0
highest score = 2.6043996588901104
还有一些方法可以让您指定任何一个/两个单词的含义:res(String word1, int senseNum1, String word2, partOfSpeech)
等。不幸的是,源文档不是JavaDoc,因此您需要手动检查它。来源可以下载here。
可用的算法是:
JWSRandom(ws.getDictionary(), true, 16.0);//random number for baseline
Resnik res = ws.getResnik();
LeacockAndChodorowlch = ws.getLeacockAndChodorow();
AdaptedLesk adLesk = ws.getAdaptedLesk();
AdaptedLeskTanimoto alt = ws.getAdaptedLeskTanimoto();
AdaptedLeskTanimotoNoHyponyms altnh = ws.getAdaptedLeskTanimotoNoHyponyms();
HirstAndStOnge hso = ws.getHirstAndStOnge();
JiangAndConrath jcn = ws.getJiangAndConrath();
Lin lin = ws.getLin();
WuAndPalmer wup = ws.getWuAndPalmer();
此外,它要求您拥有麻省理工学院JWI
的jar文件答案 1 :(得分:1)
JAWS中有功能可以找到类似的wordForms 以下是详细信息:
public AdjectiveSynset [] getSimilar()抛出WordNetException,这里是你可以查看的链接:http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/AdjectiveSynset.html 这个链接包含了你可以使用的细节。
答案 2 :(得分:0)
我不确定JAWS或JWNL是否提供了计算synset之间相似性的方法,但我已经尝试了两种搜索同义词,我发现JAWS更容易使用。具体来说,简单:
// Specifying the Database Directory
System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");
比JWNL的file_properties.xml要求更容易理解。