Java 在WordNet中搜索同义词只给出一个结果
我正在使用JavaJWIAPI搜索wordnet以获取单词的同义词。问题是,它只给了我一个结果——单词本身找到同义词。请引导我。是否有可能获得给定单词的所有可能同义词的列表?我的代码是:Java 在WordNet中搜索同义词只给出一个结果,java,wordnet,synonym,jwi,Java,Wordnet,Synonym,Jwi,我正在使用JavaJWIAPI搜索wordnet以获取单词的同义词。问题是,它只给了我一个结果——单词本身找到同义词。请引导我。是否有可能获得给定单词的所有可能同义词的列表?我的代码是: public void searcher() { try { url = new URL("file", null, path); dict = new Dictionary(url); try { dict.open()
public void searcher() {
try {
url = new URL("file", null, path);
dict = new Dictionary(url);
try {
dict.open();
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "Dictionary directory does not exist\n" + ex + "\nClass:Meaning Thread", "Dictionary Not Found Error", JOptionPane.ERROR_MESSAGE);
}
IIndexWord idxWord = dict.getIndexWord("capacity", POS.NOUN);
IWordID wordID = idxWord.getWordIDs().get(0);
IWord word = dict.getWord(wordID);
//Adding Related Words to List of Realted Words
ISynset synset = word.getSynset();
for (IWord w : synset.getWords()) {
System.out.println(w.getLemma());
}
} catch (Exception e) {
}
}
输出仅为:
capacity
本身!实际同义词必须是:
capability
capacitance
content
electrical capacitance
mental ability...(so on)
那么代码中是否有我遗漏的东西,或者有人能告诉我真正的问题是什么
提前感谢您得到的是“”,它具有“执行或生产能力”的含义,实际上只有一个同义词。(玩转PWN搜索页面,了解WordNet如何将单词组织成语法集。)
听起来你想要的是所有语法集中所有同义词的结合?我认为您要么使用,要么只是在
idxWord.getWordIDs().get(0)周围放置一个循环
,将0
替换为循环计数器,这样您不仅可以获得数组中的第一项。因此,我使用Java JAWS进行wordnet搜索!这些步骤是:
1- Download WordNet Dictionary from
2-安装WordNet
3-转到已安装目录并复制WordNet目录(在我的例子中,C:\Program Files(x86)是WordNet文件夹的目录)
4-将其粘贴到我的Java项目中(在MyProject>WordNet下)
5-将目录的路径设置为:
文件f=新文件(“WordNet\\2.1\\dict”);
setProperty(“wordnet.database.dir”,f.toString());
6-同义词如下:
公共类TestJAWS{
公共静态void main(字符串[]args){
字符串wordForm=“容量”;
//获取包含单词form=capicity的语法集
文件f=新文件(“WordNet\\2.1\\dict”);
setProperty(“wordnet.database.dir”,f.toString());
//设置WordNet目录的路径
WordNetDatabase=WordNetDatabase.getFileInstance();
Synset[]synsets=database.getSynsets(wordForm);
//显示检索到的语法集的单词形式和定义
如果(synsets.length>0){
ArrayList al=新的ArrayList();
//向al添加元素,包括重复项
HashSet hs=新的HashSet();
for(int i=0;i
问题是,如果您想使用JWI并获取多个同义词,则必须拥有jaws bin.jar,然后从以下位置更改代码:
IIndexWord idxWord = dict.getIndexWord(inputWord, POS.NOUN);
try {
int x = idxWord.getTagSenseCount();
for (int i = 0; i < x; i++) {
IWordID wordID = idxWord.getWordIDs().get(i);
IWord word = dict.getWord(wordID);
// Adding Related Words to List of Realted Words
ISynset synset = word.getSynset();
for (IWord w : synset.getWords()) {
System.out.println(w.getLemma());
// output.add(w.getLemma());
}
}
} catch (Exception ex) {
System.out.println("No synonym found!");
}
IIndexWord idxWord=dict.getIndexWord(inputWord,POS.NOUN);
试一试{
int x=idxWord.getTagSenseCount();
对于(int i=0;i
它工作得非常好。您能提供完整的代码吗。这将有助于我理解我要求的同义词组合代码。我得到错误:打开索引文件时出错:./index.sense这里是代码可以为您工作它需要jaws.jar与之集成您可以联系我juni1289@hotmail.com我从过去3年开始从事数据挖掘项目!如何处理wordnetexception。我尝试输入其他关键字,如light或ball,它会引发wordnet异常。顺便说一句,如果例外情况如下,您的条件将有额外的括号"分析语法集数据时出错::00292635 30 v 05 light 0 illume 0 illumine 0 light up 0 Lightning 3 012@00281690 v 0000+14006632 n 0501+05025708 n 0502+14711674 n 0501+14006789 n 0101+04958550 n 0101+08663763 n 0101+05025269 n 0106+03670692 n 0101+11494354 n 0101~0029330 v 0000 02+08 00+1100 |使其更轻或更亮;“这盏灯让房间亮了一点”你能为给定单词的每个POS调用getSenseEntryIterator()吗?或者这是重复的吗?@219CID是的,我想如果你想让每个可能的词类都有同义词,你应该添加一个外部循环,它将遍历每个词性标记。谢谢,我成功地做到了这一点,并且能够得到容量的这些独特同义词:容量内容电容电容电容电容电容量能力我想知道您是否可以看看这个相关的JWI/WordNet问题:
IIndexWord idxWord = dict.getIndexWord(inputWord, POS.NOUN);
try {
int x = idxWord.getTagSenseCount();
for (int i = 0; i < x; i++) {
IWordID wordID = idxWord.getWordIDs().get(i);
IWord word = dict.getWord(wordID);
// Adding Related Words to List of Realted Words
ISynset synset = word.getSynset();
for (IWord w : synset.getWords()) {
System.out.println(w.getLemma());
// output.add(w.getLemma());
}
}
} catch (Exception ex) {
System.out.println("No synonym found!");
}